2010-11-30 62 views
1

我有一個python腳本,它使用subprocess.Popen啓動大量用戶進程。每個進程stdout都被重定向到一個唯一的文件。例如我發起的每個過程如下將多個進程的stdout重定向到python日誌記錄模塊

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) 

我想旋轉這些文件時,他們變得太大。這樣做的最好方法是什麼?我想用日誌模塊,但我不認爲這是它的用途

感謝

回答

0

如何logging.handlers.RotatingFileHandler

+0

謝謝,但我需要爲每個進程的記錄器。這個班有可能嗎? – mikip 2010-11-30 16:50:07

+0

如果每個進程都有一個id,那麼應該是可以的 - 然後你可以把id燒成文件名。 – 2010-11-30 16:57:35

1

不是pythonic解決方案;但在Linux系統上,我更喜歡使用logrotate來自動旋轉我的日誌。檢查它是否安裝在你的系統上(在Ubuntu上說有一個名爲/etc/logrotate.d/的目錄,文件通過cron自動運行)。這可能會或可能不會優先於從應用程序中運行日誌循環。

這是非常可配置的,例如,允許壓縮較舊的文件通過旋轉N命令保持N個文件,當cron超過「大小100k」時旋轉,並查看man logrotate,其設置非常簡單。

從man頁面這裏是一個示例文件

# 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 [email protected] 
     size 100k 
     sharedscripts 
     postrotate 
      /usr/bin/killall -HUP httpd 
     endscript 
    } 
相關問題