Перенаправление stdout из нескольких процессов в модуль Python Logging - PullRequest
1 голос
/ 30 ноября 2010

У меня есть скрипт на python, который запускает ряд пользовательских процессов, используя subprocess.Popen.Каждый стандартный процесс перенаправляется в уникальный файл.Например, я запускаю каждый процесс следующим образом

proc = my_proc  
for p in range(1, max_p, 1):  
    log_file = proc + "_" + str(p) + ".log"  
    log = open(log_file, "w+")  
    subprocess.Popen([my_proc, p], shell = False, stdout = log)  

Я бы хотел повернуть эти файлы, когда они станут слишком большими.Что бы лучший способ сделать это?Я хотел бы использовать модуль регистрации, но я не думаю, что это его предполагаемое использование

Спасибо

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

Не питонное решение; но в системах Linux я предпочитаю использовать logrotate для автоматического поворота моих логов. Проверьте, установлен ли он в вашей системе (в ubuntu, скажем, есть каталог /etc/logrotate.d/ с файлами, автоматически запускаемыми через cron). Это может или не может быть предпочтительным, если ротация журналов запускается из приложения.

Он очень настраиваемый, например, позволяет сжимать старые файлы, сохраняет N файлов с помощью команды rotate N, поворачивает, когда cron превышает «size 100k», и, глядя на man logrotate, очень прост в настройке.

На странице руководства вот пример файла

   # sample logrotate configuration file
   compress

   /var/log/messages {
       rotate 5
       weekly
       postrotate
           /usr/bin/killall -HUP syslogd
       endscript
   }

   "/var/log/httpd/access.log" /var/log/httpd/error.log {
       rotate 5
       mail www@my.org
       size 100k
       sharedscripts
       postrotate
           /usr/bin/killall -HUP httpd
       endscript
   }
0 голосов
/ 30 ноября 2010

Как насчет logging.handlers.RotatingFileHandler?

...