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

如何通过logger.config实现应用每次运行生成新info.log文件?

解决方案

要实现每次运行应用时生成新的info.log文件,同时将旧日志按规则备份,你只需要对log.py做两处修改:

1. 补全缺失的依赖导入

在log.py开头添加os模块导入(原代码使用了os.path但未导入):

import os
import configparser
import logging.config

2. 在日志初始化后强制触发轮转

修改setup_logging函数,在完成日志配置后,找到对应的文件处理器并调用doRollover()方法,强制生成新日志文件:

修改后的setup_logging函数代码:

def setup_logging(json_filename='logging_conf.json', default_level=logging.INFO,
                  env_key='LOG_CFG', log_file_basepath=".", customised_file_name=""):
    """
      Setup logging configuration
    """
    json_filepath = os.path.join(log_file_basepath, json_filename)
    env_json_filepath = os.getenv(env_key, None)
    if env_json_filepath:
        json_filepath = env_json_filepath
    if logging_conf:
        log_file_name = logging_conf["handlers"]["info_file_handler"]["filename"]
        if customised_file_name:
            log_file_name = customised_file_name
        log_file_path = os.path.join(log_file_basepath, log_file_name)
        logging_conf["handlers"]["info_file_handler"]["filename"] = log_file_path
        logging.config.dictConfig(logging_conf)
        
        # 强制触发日志轮转,生成新的info.log
        for handler in logging.getLogger().handlers:
            if isinstance(handler, logging.handlers.RotatingFileHandler) and handler.baseFilename == log_file_path:
                handler.doRollover()
                break
    else:
        logging.basicConfig(level=default_level)

原理说明

  • 原配置使用的RotatingFileHandler默认仅当日志文件大小达到maxBytes(10MB)时才会自动轮转。
  • 手动调用doRollover()会在应用启动时立即执行以下操作:
    1. 将当前的info.log重命名为info.log.1(若已有info.log.1则依次向后推,如info.log.2)
    2. 自动创建新的空白info.log用于本次运行的日志记录
    3. 超过backupCount=20的旧备份文件会被自动清理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:22:45