2015-01-08 5 views
5

私は午前0時に新しいログファイルを作成する時間回転ロガーを作った。私のログファイルでは、すべてのファイルの先頭にヘッダーを書いています。私は、ファイルが作成された瞬間にこのヘッダをログファイルに書き込む関数を呼び出す効率的な方法を探しています。時間回転ロガーで作成されたすべてのログファイルにヘッダーを書き込む

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) 
+1

doRolloverをオーバーライドすると機能しますか? –

+0

はい、それは完了する必要がありました!私は以下の答えを掲載しました。 – Gio

答えて

4

私はそれを解決しました!基本的には、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) 
関連する問題