我制作了一个时间轮转的记录器,该记录器在午夜创建了一个新的日志文件。在我的日志文件中,我想在每个文件的顶部写一个标题。我正在寻找一种有效的方法来调用一个函数,该函数在创建文件后立即将此标头写入日志文件。
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)
我已经解决了!基本上,所有需要做的就是重写的doRollover
方法,TimedRotatingFileHandler
在这个新的父类中还需要一些代码才能传递日志记录实例并设置标头内容。在此,为遇到类似情况的人们提供一个广泛的例子。
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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句