2015-01-08 23 views
5

ile oluşturulan her bir günlük dosyasına bir başlık yazın. Gece yarısında yeni bir günlük dosyası oluşturan zaman döndürücü bir kayıt cihazı yaptım. Benim günlük dosyamda her dosyanın en üstünde bir başlık yazmak istiyorum. Dosyanın oluşturulduğu anda bu üstbilgiyi günlük dosyasına yazan bir işlevi çağırmanın etkili bir yolunu arıyorum.Zaman ayarlı bir kayıt cihazı

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' işlevini geçersiz kıldığınızda çalışır mı? –

+0

Evet, yapılması gereken tek şey buydu! Cevabı aşağıda yazdım. – Gio

cevap

4

Bunu çözdüm! Temel olarak yapılması gereken tek şey, TimedRotatingFileHandler'un doRollover yöntemini geçersiz kılarken, bu yeni üst sınıfta, günlüğe kaydetme örneğini geçirmek ve üstbilgi içeriğini ayarlamak için bazı kodlara ihtiyaç vardır. Böylelikle benzer bir durumla karşılaşan insanlar için kapsamlı bir örnek.

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) 
İlgili konular