当我在python logging上查看Python文档并进行一些实验时,我不是很理解,
第一次计算下一个滚动时间时(创建处理程序时),将使用现有日志文件的上次修改时间或当前时间来计算下一个滚动发生的时间。
我发现每小时轮换的轮换时间会受到我开始记录的时间的影响,比如12:23:33开始,下一次轮换是在13:23:33,这最终会使日志文件名混淆。
代码应该是这样的,
TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False)
有没有办法强制每小时日志循环从00分钟(如13:00:00)开始,而不是从日志记录开始的时间开始,并且每个日志将只包含其日志文件名所指示的小时内的日志?
4条答案
按热度按时间nbewdwxp1#
查看
TimedRotatingFileHandler
的代码,您不能强制它以特定的分钟值旋转:根据文档,如果日志文件已经存在,则下一次转存将发生在logfile last modification time + interval
,如果日志文件不存在,则下一次转存将发生在current time + interval
。但是,由于您似乎知道文件名,因此可以先将日志文件的最后修改时间设置为当前小时来欺骗
TimedRotatingFileHandler
:(未测试)
btxsgosb2#
我还附上了另一个答案。Python日志支持WatchedFileHandler,如果发现文件信息更新,它将关闭并重新打开具有相同文件名的日志文件。它可以很好地与系统级日志旋转(如Linux logrotate守护进程)配合使用。
uoifb46i3#
jv4diomz4#
我写了一个custom Handler,通过它可以实现你需要的功能。
将上面的代码另存为
testhandler.py
并运行以下命令:您可以看到如下输出:
日志文件中的内容: