我使用 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]
按理说,应该生成如下文件
/data/log/api.log
/data/log/api.log.2019-07-28
/data/log/api.log.2019-07-27
事实上,2019-07-29 的部分日志居然存到了 /data/log/api.log.2019-07-28
文件中。 某天的部分日志都会存到前一天的日志文件中。
请问这是为什么?
![]() | 1 RRRoger 2019-07-29 15:32:05 +08:00 1. 可能时区问题 2. 好像默认分割并不是按照每日来的 |
![]() | 2 keakon 2019-07-29 15:43:59 +08:00 代码中是先检查是否需要 rotating,然后再 format 时间的,这里存在时间差。 另外,官方的实现比较低效,自己实现比较好。 |
3 WanKang 自己重写 FileHandler 吧,这问题和时区这些没什么关系,python 的 logger 日志仅仅保证线程安全,不管你是时间分割还是大小分割最后都会遇到这个问题,你可以查查多进程 python 的 logger 日志写入混乱的相关资料。 |
4 txy3000 2019-07-29 19:07:04 +08:00 "class": "cloghandler.ConcurrentRotatingFileHandler" 进程安全的 Handler 检索一下 |
![]() | 5 wd 2019-07-29 21:29:07 +08:00 via iPhone 多进程吧?写一个文件然后通过 logrotate 啥的轮转吧 |
![]() | 6 qionnian 2019-07-29 22:17:34 +08:00 |
![]() | 7 jesnridy 2019-07-30 11:23:38 +08:00 分割的逻辑是按照 modify time 来做的 |
![]() | 8 roceys 2020-04-01 17:20:24 +08:00 日志按天生成是指你程序启动时后的 24 小时才会生成第二天的,并不是 0 点一过就生成。 |