Python logging 日志按天轮换问题

2019 年 7 月 29 日
 feihuxiongdi

我使用 flask 开发 python 应用,下面是 logging 模块的配置:

handlers:
  file_api:
    class: logging.handlers.TimedRotatingFileHandler
    level: INFO
    formatter: simple
    when: midnight
    filename: /data/log/api.log
root:
  level: DEBUG
  handlers: [file_api]

按理说,应该生成如下文件

事实上,2019-07-29 的部分日志居然存到了 /data/log/api.log.2019-07-28 文件中。 某天的部分日志都会存到前一天的日志文件中。

请问这是为什么?

5773 次点击
所在节点    Python
8 条回复
RRRoger
2019 年 7 月 29 日
1. 可能时区问题
2. 好像默认分割并不是按照每日来的
keakon
2019 年 7 月 29 日
代码中是先检查是否需要 rotating,然后再 format 时间的,这里存在时间差。
另外,官方的实现比较低效,自己实现比较好。
WanKang
2019 年 7 月 29 日
自己重写 FileHandler 吧,这问题和时区这些没什么关系,python 的 logger 日志仅仅保证线程安全,不管你是时间分割还是大小分割最后都会遇到这个问题,你可以查查多进程 python 的 logger 日志写入混乱的相关资料。
txy3000
2019 年 7 月 29 日
"class": "cloghandler.ConcurrentRotatingFileHandler"
进程安全的 Handler 检索一下
wd
2019 年 7 月 29 日
多进程吧?写一个文件然后通过 logrotate 啥的轮转吧
qionnian
2019 年 7 月 29 日
jesnridy
2019 年 7 月 30 日
分割的逻辑是按照 modify time 来做的
roceys
2020 年 4 月 1 日
日志按天生成是指你程序启动时后的 24 小时才会生成第二天的,并不是 0 点一过就生成。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/587173

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX