登录Python/Django未按预期工作

2024-04-26 06:40:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下用于日志记录的处理程序配置:

    "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


Tags: 文件pydebug服务器log处理程序logginghandlers
1条回答
网友
1楼 · 发布于 2024-04-26 06:40:41

如前所述,here以及在许多其他地方,您不能将此处理程序用于并发日志记录(Django就是这样,它在几个线程中运行)。
潜在地,由于并发性,它们可以覆盖自己。在

要从多个进程登录到单个目标,可以使用以下方法之一:

  • 使用类似^{}
  • 使用SysLogHandler(或在Windows上使用NTEventLogHandler
  • 使用SocketHandler将日志发送到单独的进程以写入文件
  • QueueHandlermultiprocessing.Queue一起使用,如here所述。在

如果您真的需要使用基于时间的方法,那么您可以根据自己的条件重新定义ConcurrentRotatingFileHandler和{}方法。
这不是一个完美的方法,但它应该是有效的。在

您还可以查看GitHub上正在解决此问题的项目:

相关问题 更多 >

    热门问题