我有以下用于日志记录的处理程序配置:
"handlers": {
'system_file': {
'level': 'DEBUG',
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': os.path.join(LOG_FOLDER, "all.log"),
'formatter': 'verbose',
'when': 'midnight',
'backupCount': '30',
}
}
现在基于这个配置,我的日志应该每午夜轮换一次,也就是说,它应该创建日期方面的日志。在
在全部.log文件,所有内容都会以正确的时间戳正确记录,但当轮换发生时,我在备份日志文件(前一天的日志文件)中看不到所有日志。在
例如:
假设今天是2019-10-29全部.log文件从2019-10-29 00:00:00到2019-10-29 23:59:59开始存储所有日志。在
第二天,即2019年10月30日(轮换发生时),我去检查全部.log.2019-10-29,包含2019-10-30 00:00:00到2019-10-30 01:00:00的日志和全部.log文件从00:00:00开始存储2019-10-30的日志。所以基本上我所有的备份文件只包含第二天00:00:00-01:00:00的日志。在
全部.log截至2019-10-30
^{2}$全部.log2019年10月29日
[DEBUG 2019-10-30 00:00:07,463 cron.py:44] .....
[DEBUG 2019-10-30 00:00:11,692 cron.py:44] ....
[DEBUG 2019-10-30 00:00:13,679 cron.py:44] ....
.
.
.
[DEBUG 2019-10-30 00:00:52,463 cron.py:44] .....
[DEBUG 2019-10-30 00:00:55,692 cron.py:44] ....
[DEBUG 2019-10-30 00:59:58,679 cron.py:44] ....
全部.log2019-10-28
[DEBUG 2019-10-29 00:00:04,463 cron.py:44] .....
[DEBUG 2019-10-29 00:00:09,692 cron.py:44] ....
[DEBUG 2019-10-29 00:00:11,679 cron.py:44] ....
.
.
.
[DEBUG 2019-10-29 00:00:49,463 cron.py:44] .....
[DEBUG 2019-10-29 00:00:52,692 cron.py:44] ....
[DEBUG 2019-10-29 00:59:56,679 cron.py:44] ....
我使用的服务器按计划运行,服务器在凌晨1点关闭,7点启动。为什么我不明白为什么会发生这种奇怪的行为
感谢任何帮助。在
我使用的是django1.9.7和python2.7.15
如前所述,here以及在许多其他地方,您不能将此处理程序用于并发日志记录(Django就是这样,它在几个线程中运行)。
潜在地,由于并发性,它们可以覆盖自己。在
要从多个进程登录到单个目标,可以使用以下方法之一:
SysLogHandler
(或在Windows上使用NTEventLogHandler
)SocketHandler
将日志发送到单独的进程以写入文件QueueHandler
与multiprocessing.Queue
一起使用,如here所述。在如果您真的需要使用基于时间的方法,那么您可以根据自己的条件重新定义}方法。
ConcurrentRotatingFileHandler
和{这不是一个完美的方法,但它应该是有效的。在
您还可以查看GitHub上正在解决此问题的项目:
相关问题 更多 >
编程相关推荐