如何使用TimedRotatingFileHandler在指定时段存日志并设置定时轮转
关于TimedRotatingFileHandler的日志轮转配置
1. 如何使用TimedRotatingFileHandler在指定小时保存日志?
使用TimedRotatingFileHandler按指定小时保存日志,核心是设置when参数为'H',搭配interval参数指定间隔小时数,还可通过backupCount设置保留的日志文件数量。
示例代码:
import logging from logging.handlers import TimedRotatingFileHandler import datetime # 创建日志记录器 logger = logging.getLogger('hourly_logger') logger.setLevel(logging.INFO) # 配置小时轮转的处理器 handler = TimedRotatingFileHandler( 'hourly.log', when='H', # 按小时触发轮转 interval=1, # 每1小时轮转一次 backupCount=24, # 保留最近24个日志文件 encoding='utf-8' ) # 设置日志格式 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) # 将处理器添加到日志记录器 logger.addHandler(handler) # 测试输出 logger.info(f'Test log at {datetime.datetime.now()}')
设置完成后,日志文件会每小时自动轮转,生成的文件会带有时间后缀(如hourly.log.2024-05-20_14)。
2. 如何配置在特定时间(例如凌晨3点)执行文件轮转?
你的猜测完全正确,atTime参数就是用来实现固定时间轮转的。需要传入一个datetime.time对象,指定每天触发轮转的具体时间。
通常搭配when='MIDNIGHT'(按天轮转)使用,若需间隔多天轮转,可将when设为'D'并调整interval参数。
示例代码(每天凌晨3点轮转):
import logging from logging.handlers import TimedRotatingFileHandler import datetime logger = logging.getLogger('daily_3am_logger') logger.setLevel(logging.INFO) # 指定凌晨3点作为轮转时间 rotate_time = datetime.time(hour=3, minute=0, second=0) handler = TimedRotatingFileHandler( 'daily.log', when='MIDNIGHT', # 按天触发轮转 interval=1, # 每1天轮转一次 backupCount=7, # 保留最近7天的日志 atTime=rotate_time, encoding='utf-8' ) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) # 测试输出 logger.info(f'Test log at {datetime.datetime.now()}')
这段代码会在每天凌晨3点自动触发日志轮转,生成的文件会带有日期后缀(如daily.log.2024-05-20)。
内容的提问来源于stack exchange,提问作者sk306
相关产品推荐
相关产品推荐

