首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用时间旋转记录器创建的每个日志文件上写入一个标头。

在使用时间旋转记录器创建的每个日志文件上写入一个标头。
EN

Stack Overflow用户
提问于 2015-01-08 12:24:31
回答 3查看 4.1K关注 0票数 8

我做了一个时间旋转记录器,在午夜创建一个新的日志文件。在我的日志文件中,我想在每个文件的顶部写一个头。我正在寻找一种高效的方法来调用一个函数,该函数在创建文件时将此头写入日志文件。

代码语言:javascript
复制
import logging
from logging.handlers import TimedRotatingFileHandler

# create time-rotating log handler
logHandler = TimedRotatingFileHandler(logfile, when='midnight')

# create logger
self.log = logging.getLogger('MyTimeRotatingLogger')
self.log.addHandler(logHandler)
EN

Stack Overflow用户

回答已采纳

发布于 2015-01-08 13:59:34

我已经解决了!基本上,所需要做的就是重写TimedRotatingFileHandlerTimedRotatingFileHandler方法,还需要在这个新的父类中使用一些代码来传递日志实例并设置标头内容。在此为遇到类似情况的人提供了一个广泛的例子。

代码语言:javascript
复制
from logging.handlers import TimedRotatingFileHandler

class MyTimedRotatingFileHandler(TimedRotatingFileHandler):
    def __init__(self, logfile, when, interval):
        super(MyTimedRotatingFileHandler, self).__init__(logfile, when, interval)
        self._header = ""
        self._log = None

    def doRollover(self):
        super(MyTimedRotatingFileHandler, self).doRollover()
        if self._log is not None and self._header != "":
            self._log.info(self._header)

    def setHeader(self, header):
        self._header = header

    def configureHeaderWriter(self, header, log):
        self._header = header
        self._log = log

# create time-rotating log handler
logHandler = MyTimedRotatingFileHandler(logfile, when='midnight')
form = '%(asctime)s %(name)s %(levelname)s: %(message)s'
logFormatter = logging.Formatter(form)
logHandler.setFormatter(logFormatter)

# create logger
log = logging.getLogger('MyLogger')
logHandler.configureHeaderWriter('test-header', log)
log.addHandler(logHandler)
log.setLevel(logging.INFO)
票数 12
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27840094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档