2017-09-08 4 views
0

J'essaie d'ajouter un RotatingFileHandler à mon chien de garde, ce qui me permet de contrôler la croissance du fichier journal. À des fins d'illustration, j'utiliserai le Watchdog Quickstart Example.Ajouter un enregistrement RotationFileHandler à Watchdog

J'ai trouvé un thread expliquant comment mettre en œuvre RotatingFileHandler l'exploitation forestière de pythons, mais je reçois coincé lorsque je tente de combiner les deux scripts:

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() 

Le code ne génère pas d'erreurs mais conserve l'exploitation forestière comme d'habitude. Je soupçonne que le RotatingFileHandler est seulement passé à l'enregistreur habituel et pas au LoggingEventHandler, mais je n'ai aucune idée de comment le passer au gestionnaire correct.

Des conseils sont très appréciés,

Cordialement

Répondre

1

code source de chien de garde Vérifiez à propos LoggingEventHandler: http://pythonhosted.org/watchdog/_modules/watchdog/events.html#LoggingEventHandler

Comme vous pouvez le voir, il suffit d'utiliser LoggingEventHandlerlogging pour ouvrir une session. Ce que vous devez faire est de mettre en œuvre votre LoggingEventHandler personnalisé.

Par exemple:

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) 

Et puis utilisez votre commande LoggingEventHandler.

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

Très bien, merci! J'ai également ajouté un formateur au gestionnaire pour conserver l'horodatage: 1) handler = RotatingFileHandlers (** args) 2) formatter = logging.Formatter ('% (asctime) s -% (message) s') 3) handler .setFormatter (formatter) 4) logger.addHandler (gestionnaire) – Koen