将stdout从多个进程重定向到python日志模块
我有一个python脚本,它使用subprocess.Popen启动许多用户进程。每个进程标准都被重定向到一个唯一的文件。例如,我启动每个流程如下将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,
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来旋转该目录中的所有日志文件。这实际上是第三个例子,我删掉了。