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

Python dictConfig中TimedRotatingFileHandler每日轮转失效问题

日志每日轮转失效问题排查与修复

核心问题分析

  1. 多Handler共享同一日志文件
    info_time_handler和error_time_handler都配置了相同的filename: '../logs/dinfo.log',两个TimedRotatingFileHandler实例同时操作同一个文件会引发文件句柄冲突:

    • 应用启动时的日志能写入是因为此时两个handler的文件句柄刚初始化,还未出现竞争;
    • 后续日志写入时,两个handler的文件操作互相干扰,导致日志无法正常输出,轮转逻辑也无法触发。
  2. 冗余配置项
    两个时间轮转handler中重复定义了backupCount:7,虽然Python字典会自动保留最后一个值,但属于无效冗余配置,建议清理。

修复后的配置示例

logging.config.dictConfig({
'version': 1,
'disable_existing_loggers': False,
'formatters': {
    'simple': {
        'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    }
},
'handlers': {
    'console': {
        'class': 'logging.StreamHandler',
        'level': 'DEBUG',
        'formatter': 'simple',
        'stream': 'ext://sys.stdout'
    },

    'info_file_handler': {
        'class': 'logging.handlers.RotatingFileHandler',
        'level': 'INFO',
        'formatter': 'simple',
        'filename': '../logs/info.log',
        'maxBytes': 10485760,
        'backupCount': 20,
        'encoding': 'utf8'
    },

    'error_file_handler': {
        'class': 'logging.handlers.RotatingFileHandler',
        'level': 'ERROR',
        'formatter': 'simple',
        'filename': '../logs/errors.log',
        'maxBytes': 10485760,
        'backupCount': 20,
        'encoding': 'utf8'
    },

    'info_time_handler': {
        'class': 'logging.handlers.TimedRotatingFileHandler',
        'level': 'INFO',
        'formatter': 'simple',
        "when": "d",  # 按天轮转
        "interval": 1,
        "backupCount": 7,
        'filename': '../logs/daily_info.log',  # 使用独立文件名
        'encoding': 'utf8'
    },

    'error_time_handler': {
        'class': 'logging.handlers.TimedRotatingFileHandler',
        'level': 'ERROR',
        'formatter': 'simple',
        "when": "d",  # 按天轮转
        "interval": 1,
        "backupCount": 7,
        'filename': '../logs/daily_errors.log',  # 使用独立文件名
        'encoding': 'utf8'
    }
},
'root': {
    'level': 'INFO',
    'handlers': ['console', 'info_time_handler', 'error_time_handler']
}  
})

额外验证步骤

  • 确认../logs目录存在且应用进程有读写权限,避免因权限问题导致日志写入失败;
  • 若需快速测试轮转逻辑,可临时修改when为's'(秒级)、interval:5,验证轮转是否正常触发。

内容的提问来源于stack exchange,提问作者Sultan Zhumatayev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:35:50