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

Python日志每日生成异常:为何仅生成启动当日日志?

问题根源

logging.basicConfig() 是幂等性的:它只会在第一次被调用时完成日志系统的初始化,后续重复调用不会修改已有的配置。哪怕你在循环里每次都计算新日期并传入不同的filename参数,日志系统也不会切换到新文件,只会持续往脚本启动当日创建的日志文件中写入内容。

解决方案

推荐两种可行的修复方式,按需选择:

方案1:使用内置的TimedRotatingFileHandler(更规范可靠)

这是logging模块专门为按时间分割日志设计的处理器,能自动在指定时间点生成新日志文件,无需手动处理日期判断:

import logging
from logging.handlers import TimedRotatingFileHandler
import time

log_base_path = '/home/test/daily.log'

# 配置按天轮转的日志处理器
handler = TimedRotatingFileHandler(
    filename=log_base_path,
    when='midnight',  # 每天午夜触发日志切换
    interval=1,       # 轮转间隔为1天
    backupCount=7,    # 保留最近7天的历史日志
    encoding='utf-8'
)
# 设置日志格式
formatter = logging.Formatter('%(asctime)s %(message)s')
handler.setFormatter(formatter)

# 配置根日志器
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)

while True:
    logger.debug("Main: start script")
    # 此处替换为你的业务逻辑代码
    time.sleep(30)

该方案会自动生成带日期后缀的日志文件(如daily.log.2024-05-20),并自动清理超出保留数量的旧日志,无需手动维护文件切换逻辑。

方案2:手动动态切换日志文件(自定义场景适用)

如果需要完全自定义日志文件命名或切换逻辑,可以每次循环检查日期变化,动态更新日志处理器:

import logging
from datetime import date
import time
from logging import FileHandler

log_path = '/home/test/'
last_recorded_date = None
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

while True:
    current_date = date.today()
    # 日期变更或首次运行时,切换日志文件
    if current_date != last_recorded_date:
        # 移除并关闭旧的日志处理器,避免资源泄漏
        for handler in logger.handlers[:]:
            logger.removeHandler(handler)
            handler.close()
        # 创建新的日志文件处理器
        log_file_name = f"{log_path}{current_date}.log"
        new_handler = FileHandler(log_file_name, encoding='utf-8')
        new_handler.setFormatter(logging.Formatter('%(asctime)s %(message)s'))
        logger.addHandler(new_handler)
        last_recorded_date = current_date
    
    logger.debug("Main: start script")
    # 此处替换为你的业务逻辑代码
    time.sleep(30)

这种方式需要手动管理处理器的生命周期,注意必须关闭旧处理器以释放文件资源。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:32:42