You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:01:42