handlers.TimedRotatingFileHandler~按照时间自动分割日志文件 此处的时间是时间周期,而不是一个严格的时间段;
例如是从 01:30:04 到 01:31:04 这个时间周期
class Logger(object):
level_mapping = {
'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
}
def __init__(self, filename, level='info', when='midnight', backCount=100,
fmt='%(asctime)s - [line:%(lineno)d] - %(levelname)s: %(message)s'):
self.logger = logging.getLogger(filename)
format_str = logging.Formatter(fmt)
self.logger.setLevel(self.level_mapping.get(level))
self.logger.propagate = False
stream = logging.StreamHandler()
stream.setFormatter(format_str)
file = handlers.TimedRotatingFileHandler(filename=filename, when=when, backupCount=backCount,
encoding='utf-8') # 往文件里写入
# Calculate the real rollover interval, which is just the number of
# seconds between rollovers. Also set the filename suffix used when
# a rollover occurs. Current 'when' events supported:
# S 秒
# M 分
# H 小时
# D 天
# W 每星期(interval==0时代表星期一)
# midnight 凌晨 为了更好的解决这个时候周期重新计算的问题,选用midnight
如果项目是持续运行的,这个类只初始化一次,那这个日志分割还是可以达到目的的。而且里面还设计有按年,按月分割的,一年内项目不重启不升级,说实话概率还是蛮低的,一重启这个时间就会重新算,然后日志分割时间就会推迟了。
为了更好的解决这个时候周期重新计算的问题! 阅读源码后看到它有一个按 midnight 分割日期的功能。就是它会在计算当前时间到凌晨零点的秒数,然后每次写日志时都会判断过没过凌晨,到了后就会自动分割日志。这个功能还蛮符合我需求的