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

如何在Python每个日志文件开头添加创建者等基础信息?

问题

在Python中使用RotatingFileHandler生成滚动日志文件,当前已能生成新日志文件,但希望在新日志文件创建时,自动在开头添加如下格式的基础信息:

#--------------------------#
# Created by  : xxx
# Employee ID : xxx
# Date        : xxxx
#--------------------------#

现有日志实现代码如下:

def errorlog(cls, filename, level=logging.DEBUG):
        file_handler = RotatingFileHandler(
            os.path.join(BASE_DIR, name, filename),
            maxBytes=100,
            mode= write_mode,
            backupCount=10,
        )
        file_handler.setFormatter(formatter)
        if (logger.hasHandlers()):
            logger.handlers.clear()
        logger.addHandler(file_handler)

请问该如何实现上述需求?

解决方案

要实现新日志文件创建时自动写入头部信息,需自定义RotatingFileHandler子类,重写doRollover方法——该方法负责日志滚动逻辑,我们在其中添加写入头部的操作。

1. 自定义滚动日志处理器

继承RotatingFileHandler,重写doRollover,同时在初始化时处理空日志文件的头部写入:

import logging.handlers
import os
from datetime import datetime

class HeaderRotatingFileHandler(logging.handlers.RotatingFileHandler):
    def __init__(self, *args, **kwargs):
        self.header = kwargs.pop('header', '')
        super().__init__(*args, **kwargs)
        # 初始化时若日志文件为空,写入头部
        if os.path.exists(self.baseFilename) and os.path.getsize(self.baseFilename) == 0:
            self.stream.write(self.header + '\n')
            self.stream.flush()

    def doRollover(self):
        super().doRollover()
        # 滚动后向新文件写入头部
        if self.stream:
            self.stream.write(self.header + '\n')
            self.stream.flush()

2. 构造头部信息

编写函数生成符合格式的头部内容:

def generate_header():
    created_by = "xxx"
    emp_id = "xxx"
    current_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    return (
        "#--------------------------#\n"
        f"# Created by  : {created_by}\n"
        f"# Employee ID : {emp_id}\n"
        f"# Date        : {current_date}\n"
        "#--------------------------#"
    )

3. 修改原日志初始化代码

替换原RotatingFileHandler为自定义处理器,传入头部信息:

def errorlog(cls, filename, level=logging.DEBUG):
    header_content = generate_header()
    file_handler = HeaderRotatingFileHandler(
        os.path.join(BASE_DIR, name, filename),
        maxBytes=100,
        mode=write_mode,
        backupCount=10,
        header=header_content
    )
    file_handler.setFormatter(formatter)
    if logger.hasHandlers():
        logger.handlers.clear()
    logger.addHandler(file_handler)

关键说明

  • 初始化时检测日志文件大小,为空则写入头部,覆盖首次创建文件的场景;
  • 日志滚动触发doRollover时,完成文件切换后立即写入头部,覆盖滚动生成新文件的场景;
  • 头部信息可动态生成,比如日期会自动取当前滚动/创建时的时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:24:15