python日志记录模块中when='D'
的{{1}}和when='midnight'
之间的区别是什么?
我无法从官方文件中得到它。
答案 0 :(得分:13)
TimedRotatingFileHandler
有两个相关参数:when
和interval
。 when
的大多数可能值,例如D
天,或H
小时,与interval
一起使用 - 例如,如果when='D', interval=7
指定后,日志将每七天轮换一次。同样,如果指定了when='H', interval=12
,那么日志将每12小时轮换一次,从脚本启动时开始。 when='midnight'
是一种特殊情况,因为未使用interval
参数,并且无论脚本启动的时间如何,日志都会在午夜每天滚动(请参阅源{ {3}})。
答案 1 :(得分:0)
展开Kurt Raschke's answer和Brownnightingale's coment:
您甚至可以将when="midnight"
参数与interval
结合使用,并且从python 3.4您甚至可以使用新参数atTime
,这样就可以每隔一天轮换一次日志({{1} }),每隔午夜(when='d', interval=2
)或一天中其他时间,例如中午(when='midnight', interval=2
):
when='midnight', interval=2, atTime=datetime.time()
将输出如下内容:
import datetime
import logging.handlers
import time
noon = datetime.time(hour=12)
handler = logging.handlers.TimedRotatingFileHandler(
filename='daily.log',
when='d',
interval=2)
handler_midnight = logging.handlers.TimedRotatingFileHandler(
filename='daily.log',
when='midnight',
interval=2)
handler_noon = logging.handlers.TimedRotatingFileHandler(
filename='daily.log',
when='midnight',
atTime=noon,
interval=2)
current_time = int(time.time())
rollover_time = handler.computeRollover(current_time)
rollover_time_midnight = handler_midnight.computeRollover(current_time)
rollover_time_noon = handler_noon.computeRollover(current_time)
print('current time: {}'.format(datetime.datetime.fromtimestamp(current_time)))
print('next log rotation: {}'.format(datetime.datetime.fromtimestamp(rollover_time)))
print('next midnight log rotation: {}'.format(datetime.datetime.fromtimestamp(rollover_time_midnight)))
print('next noon log rotation: {}'.format(datetime.datetime.fromtimestamp(rollover_time_noon)))