2017-09-08 2 views
0

Ich versuche, einen RotatingFileHandler zu meinem Watchdog hinzuzufügen, so dass ich das Logfile-Wachstum im Zaum halten kann. Zur Veranschaulichung verwende ich die Watchdog Quickstart Example.Fügen Sie einen RotatingFileHandler zur Watchdog-Protokollierung hinzu

fand ich eine thread zu erklären, wie die Anmeldung RotatingFileHandler zu implementieren Pythons, aber ich stecken bleiben, wenn ich versuche beide Skripte zu kombinieren:

if __name__ == "__main__": 
    logging.basicConfig(filename='test.log', # added filename for convencience 
         level=logging.INFO, 
         format='%(asctime)s - %(message)s', 
         datefmt='%Y-%m-%d %H:%M:%S') 

    # edited Quickstart example with RotatingFileHandler here 
    logger = logging.getLogger('test') 
    handler = RotatingFileHandler("test.log", maxBytes=2000, backupCount=2) 
    logger.addHandler(handler) 

    path = sys.argv[1] if len(sys.argv) > 1 else '.' 
    event_handler = LoggingEventHandler() 
    observer = Observer() 
    observer.schedule(event_handler, path, recursive=True) 
    observer.start() 
    try: 
     while True: 
      time.sleep(1) 
    except KeyboardInterrupt: 
     observer.stop() 
    observer.join() 

Der Code keine Fehler erzeugen, aber wie üblich hält anzumelden. Ich vermute, dass der RotatingFileHandler nur an den normalen Logger und nicht an den LoggingEventHandler übergeben wird, aber ich habe keine Ahnung, wie ich ihn an den richtigen Handler weitergeben soll.

Irgendwelche Tipps sehr geschätzt werden,

Grüße

Antwort

1

Quellcode prüfen Watchdog über LoggingEventHandler: http://pythonhosted.org/watchdog/_modules/watchdog/events.html#LoggingEventHandler

Wie Sie sehen können, LoggingEventHandler nur logging verwenden loggt sein. Was Sie tun müssen, ist die Implementierung Ihrer benutzerdefinierten LoggingEventHandler.

Zum Beispiel:

class CustomLoggingEventHandler(LoggingEventHandler): 
    """Logs all the events captured.""" 

    def __init__(self, logger): 
     self.logger = logger 

    def on_moved(self, event): 
     super().on_moved(event) 

     what = 'directory' if event.is_directory else 'file' 
     self.logger.info("Moved %s: from %s to %s", what, event.src_path, 
        event.dest_path) 

    def on_created(self, event): 
     super().on_created(event) 

     what = 'directory' if event.is_directory else 'file' 
     self.logger.info("Created %s: %s", what, event.src_path) 

    def on_deleted(self, event): 
     super().on_deleted(event) 

     what = 'directory' if event.is_directory else 'file' 
     self.logger.info("Deleted %s: %s", what, event.src_path) 

    def on_modified(self, event): 
     super().on_modified(event) 

     what = 'directory' if event.is_directory else 'file' 
     self.logger.info("Modified %s: %s", what, event.src_path) 

Und dann Ihre benutzerdefinierten LoggingEventHandler verwenden.

event_handler = CustomLoggingEventHandler(logger) 
observer = Observer() 
observer.schedule(event_handler, path, recursive=True) 
+0

Großartig, danke! Ich habe dem Handler auch einen Formatierer hinzugefügt, um den Zeitstempel beizubehalten: 1) handler = RotatingFileHandlers (** args) 2) formatter = logging.Formatter ('% (asctime) s -% (Nachricht) s') 3) Handler .setFormatter (Formatierer) 4) logger.addHandler (Handler) – Koen

Verwandte Themen