2015-01-08 9 views
5

के साथ बनाई गई प्रत्येक लॉगफाइल पर एक शीर्षलेख लिखें मैंने एक समय-घूर्णन लॉगर बनाया है जो मध्यरात्रि में एक नया लॉगफाइल बनाता है। मेरे लॉगफाइल में मैं प्रत्येक फ़ाइल के शीर्ष पर एक शीर्षलेख लिखना चाहता हूं। मैं एक फ़ंक्शन को कॉल करने का एक प्रभावी तरीका ढूंढ रहा हूं जो इस हेडर को फ़ाइल के निर्माण के पल पर लॉगफाइल पर लिखता है।एक समय-घूर्णन लॉगर

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

क्या यह काम करता है जब आप 'डोलरओवर' ओवरराइड करते हैं? –

+0

हां वह सब कुछ करने की ज़रूरत थी! मैंने नीचे जवाब पोस्ट किया है। – Gio

उत्तर

4

मैंने इसे हल कर लिया है! असल में जो कुछ करने की जरूरत है doRolloverTimedRotatingFileHandler विधि को ओवरराइड कर रहा है, लॉगिंग इंस्टेंस पास करने और हेडर सामग्री सेट करने के लिए इस नए मूल वर्ग में कुछ कोड की आवश्यकता है। इस प्रकार उन लोगों के लिए एक व्यापक उदाहरण है जो समान स्थिति का सामना करते हैं।

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) 
संबंधित मुद्दे