实际应用中遇到TimedRotatingFileHandler不滚动的问题
2017-12-07 13:09
681 查看
需求:
程序每天晚上8点和10点定时运行,期望日志按日期记录
添加Handler部分代码如下:
查看过很多资料,代码并没有问题
现象:
只有一个日志(loaddata.log)文件被生成,其中会有所有天的日志,期望的loaddata.log.YYYY-mm-dd并没有看到
研究:
追查代码,看到handlers.py(Python自带模块)中是这样计算日志文件重新生成时间的
下面的 result 是下一次rollover的时间,上面的 t 是handler初始化时获取的起始时间。
可以看到logging模块得到的结果是这样的:
起始时间 = 日志文件的最后修改时间
下次滚动时间 = 起始时间 + 1天(因为我设置的when='D')
又因为,我每天要在20点和22点各执行一次,并且每次都有日志写入。因此:
20点执行时,起始时间 = 昨天晚上22点;下次滚动时间 = 昨天22点 + 1天 = 今天22点。所以不滚动
22点执行时,起始时间 = 今天20点;下次滚动时间 = 今天20点 + 1天 = 明天20点。所以不滚动
所以:导致的结果就是。。。永远不滚动!/(ㄒoㄒ)/~~
解决办法:
创建Handler时,把when='D'改成when='MIDNIGHT'可解决这个问题。因为MIDNIGHT指的是,只要过了0点就会滚动。
程序每天晚上8点和10点定时运行,期望日志按日期记录
添加Handler部分代码如下:
formatter = logging.Formatter("%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s", "%Y-%m-%d %H:%M:%S") log_file_handler = logging.handlers.TimedRotatingFileHandler(filename="loaddata.log", when="D", interval=1, backupCount=30) log_file_handler.setFormatter(formatter) logging.getLogger().addHandler(log_file_handler)
查看过很多资料,代码并没有问题
现象:
只有一个日志(loaddata.log)文件被生成,其中会有所有天的日志,期望的loaddata.log.YYYY-mm-dd并没有看到
研究:
追查代码,看到handlers.py(Python自带模块)中是这样计算日志文件重新生成时间的
下面的 result 是下一次rollover的时间,上面的 t 是handler初始化时获取的起始时间。
可以看到logging模块得到的结果是这样的:
起始时间 = 日志文件的最后修改时间
下次滚动时间 = 起始时间 + 1天(因为我设置的when='D')
又因为,我每天要在20点和22点各执行一次,并且每次都有日志写入。因此:
20点执行时,起始时间 = 昨天晚上22点;下次滚动时间 = 昨天22点 + 1天 = 今天22点。所以不滚动
22点执行时,起始时间 = 今天20点;下次滚动时间 = 今天20点 + 1天 = 明天20点。所以不滚动
所以:导致的结果就是。。。永远不滚动!/(ㄒoㄒ)/~~
解决办法:
创建Handler时,把when='D'改成when='MIDNIGHT'可解决这个问题。因为MIDNIGHT指的是,只要过了0点就会滚动。
相关文章推荐
- [置顶] 设计模式-单例模式(Singleton)在Android中的应用场景和实际使用遇到的问题
- python logging现学现用 – TimedRotatingFileHandler使用方法
- TCP协议的学习和应用(在实际工程遇到的问题)
- python日志按时间切分-----TimedRotatingFileHandler
- 应用设置超时时间大于3秒而实际connection timed out时间3秒的问题
- python logging 模块之TimedRotatingFileHandler 实现每天一个日志文件
- [easyui]实际应用中遇到的问题
- BigDecimal在实际项目的应用及遇到的问题
- [bigdata-078] python3 logging 的示例 TimedRotatingFileHandler和RotatingFileHandler 基于时间切分和基于文件大小切分
- FLASH CC 2015 CANVAS 实际应用过程中遇到的【粉色】问题(不定期更新)
- TimedRotatingFileHandler
- DWR在实际项目中的应用以及在调试过程中遇到的问题
- 设计模式-单例模式(Singleton)在Android中的应用场景和实际使用遇到的问题
- 设计模式-单例模式(Singleton)在Android中的应用场景和实际使用遇到的问题
- MySQL实际应用中遇到的锁问题
- logging TimedRotatingFileHandler不支持多进程
- javascript禁用Backspace退格键(结合自己实际应用中遇到的textarea中退格造成页面假死问题做了修改)
- BigDecimal在实际项目的应用及遇到的问题(转)
- 百度地图,实际应用遇到的问题。
- Python多进程不要使用TimedRotatingFileHandler