将stdout从多个进程重定向到python日志模块

将stdout从多个进程重定向到python日志模块,python,redirect,subprocess,stdout,popen,Python,Redirect,Subprocess,Stdout,Popen,我有一个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,

我有一个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)  
我想在这些文件变得太大时旋转它们。这样做的最佳方式是什么?我想使用日志模块,但我不认为这是它的预期用途


谢谢

关于
日志记录.handlers.RotatingFileHandler

关于
日志记录.handlers.RotatingFileHandler

不是pythonic解决方案;但在linux系统上,我更喜欢使用logrotate来自动旋转日志。检查您的系统上是否安装了它(在ubuntu上,有一个名为/etc/logrotate.d/的目录,其中的文件通过cron自动运行)。这可能比在应用程序中运行日志循环更可取,也可能不可取

它是非常可配置的,例如,允许压缩旧文件,通过rotate N命令保留N个文件,当cron超过“大小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
   }

不是肾盂液;但在linux系统上,我更喜欢使用logrotate来自动旋转日志。检查您的系统上是否安装了它(在ubuntu上,有一个名为/etc/logrotate.d/的目录,其中的文件通过cron自动运行)。这可能比在应用程序中运行日志循环更可取,也可能不可取

它是非常可配置的,例如,允许压缩旧文件,通过rotate N命令保留N个文件,当cron超过“大小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
   }

谢谢,但我需要一个记录器为每个进程。这个类可以吗?如果每个进程都有一个id,那么你就可以将id烘焙到文件名中。谢谢,但是我需要一个每个进程的记录器。这个类可以吗?如果每个进程都有一个id,那么就可以将id烘焙到文件名中。谢谢,但是从python脚本启动的进程可能多达100个。我是否需要每个进程和日志文件都有一个条目?您不需要每个进程/日志文件都有条目——它支持通配符。例如,如果您的所有日志都存储在一个目录/var/log/some_app/*,则可以使用.log来旋转该目录中的所有日志文件。这实际上是第三个例子,我把它删掉了。谢谢,但是从python脚本启动的进程可能多达100个。我是否需要每个进程和日志文件都有一个条目?您不需要每个进程/日志文件都有条目——它支持通配符。例如,如果您的所有日志都存储在一个目录/var/log/some_app/*,则可以使用.log来旋转该目录中的所有日志文件。这实际上是第三个例子,我删掉了。