如何通过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()会在应用启动时立即执行以下操作:- 将当前的
info.log重命名为info.log.1(若已有info.log.1则依次向后推,如info.log.2) - 自动创建新的空白
info.log用于本次运行的日志记录 - 超过
backupCount=20的旧备份文件会被自动清理
- 将当前的
内容的提问来源于stack exchange,提问作者SAGY
相关产品推荐
相关产品推荐

