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

Python实现每周滚动日志:批处理传参及默认值配置问题

Python 每周滚动日志实现方案

核心思路

logging.basicConfig 无法直接实现复杂的滚动策略,要用 logging.handlers.TimedRotatingFileHandler 实现按周滚动的日志逻辑,同时用 argparse 处理批处理传入的参数,支持可选日志名称(不传时用默认值)。

实现步骤

1. Python 日志脚本 (log_rotator.py)

import logging
from logging.handlers import TimedRotatingFileHandler
import argparse
import os

def setup_logger(log_path, log_name="app.log"):
    # 自动创建日志目录(不存在时)
    os.makedirs(log_path, exist_ok=True)
    log_file = os.path.join(log_path, log_name)

    # 初始化logger实例
    logger = logging.getLogger("weekly_rotator")
    logger.setLevel(logging.INFO)

    # 避免重复添加handler导致日志重复输出
    if logger.handlers:
        logger.handlers.clear()

    # 配置每周滚动的handler:when="W0" 表示每周一触发滚动,interval=1 每周执行一次
    handler = TimedRotatingFileHandler(
        log_file,
        when="W0",
        interval=1,
        backupCount=4,  # 保留最近4周的历史日志
        encoding="utf-8"
    )
    # 设置日志格式
    formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    handler.setFormatter(formatter)

    logger.addHandler(handler)
    return logger

if __name__ == "__main__":
    # 解析命令行参数
    parser = argparse.ArgumentParser(description="每周滚动日志工具")
    parser.add_argument("log_path", help="日志存储路径")
    parser.add_argument("log_name", nargs="?", default="app.log", help="日志文件名(可选,默认值为app.log)")
    args = parser.parse_args()

    # 初始化日志器并输出测试日志
    logger = setup_logger(args.log_path, args.log_name)
    logger.info("每周滚动日志服务启动")
    logger.warning("这是一条测试警告日志")

2. 批处理文件 (run_log.bat)

@echo off
:: 用法示例1:传入日志路径和自定义日志名
:: python log_rotator.py "D:\project_logs" "my_service.log"

:: 用法示例2:仅传入日志路径,使用默认日志名
python log_rotator.py "D:\project_logs"

pause

关键细节说明

  • 滚动时间配置:when="W0" 指定每周一执行日志滚动,若需要周日滚动可改为 when="W6";backupCount 控制保留的历史日志数量,超出上限会自动删除最旧的日志文件。
  • 参数处理逻辑:argparse 的 nargs="?" 让日志名称成为可选参数,不传参时自动使用预设的默认值。
  • 重复输出规避:每次初始化日志器前清空已存在的handler,防止多次运行脚本时日志重复输出。
  • 目录兼容性:用 os.makedirs(..., exist_ok=True) 确保日志路径不存在时自动创建,避免因目录缺失报错。

测试验证

  1. 将Python脚本和批处理文件放在同一目录下。
  2. 修改批处理中的日志路径为实际存储路径,运行批处理。
  3. 查看指定路径下的日志文件,到设置的滚动时间(如周一)时,会自动生成新的日志文件,旧日志会以 日志名.日期 的格式保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:53:24