2017-11-21 5 views
0

Ich verwende Yaml, um die Protokollierung für meine Python-Anwendung zu konfigurieren.Warum meldet sich INFO an? DEBUG-Protokolle

version: 1 
disable_existing_loggers: False 

formatters: 
    standard: 
     format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s" 

handlers: 
    console: 
     class: logging.StreamHandler 
     level: DEBUG 
     formatter: standard 
     stream: ext://sys.stdout 

    info_file_handler: 
     class: logging.handlers.RotatingFileHandler 
     level: INFO 
     formatter: standard 
     filename: info.log 
     maxBytes: 10485760 # 10MB 
     backupCount: 20 
     encoding: utf8 

    error_file_handler: 
     class: logging.handlers.RotatingFileHandler 
     level: ERROR 
     formatter: standard 
     filename: errors.log 
     maxBytes: 10485760 # 10MB 
     backupCount: 20 
     encoding: utf8 

    debug_file_handler: 
     class: logging.handlers.RotatingFileHandler 
     level: DEBUG 
     formatter: standard 
     filename: debug.log 
     maxBytes: 10485760 # 10MB 
     backupCount: 20 
     encoding: utf8 

loggers: 
     db_ops: 
     level: DEBUG 
     handlers: [info_file_handler, error_file_handler, debug_file_handler] 
     propagate: true 

In Modul db_ops verwende ich sowohl logger.info und logger.debug für verschiedene Ebenen der Protokollierung. Wenn ich die App ausführe, während INFO Ausgabe an info.log ausgegeben wurde, werden sowohl INFO als auch DEBUG Nachrichten in debug.log ausgegeben.

Was ist der richtige Weg, um das Protokoll zu verschiedenen Dateien auf der Ebene zu trennen?

Antwort

3

Die Ebenen der Python Logger und Handler sind Schwellenwerte. Wenn Sie Ihr Level als DEBUG angeben, bedeutet dies, dass alles, was gleich oder höher ist als DEBUG, protokolliert wird.

Wenn Sie nur eine DEBUG-Protokollierung haben möchten, müssen Sie zusätzlich einen Filter zuweisen, der alles außer der DEBUG-Nachricht filtert.

+0

also wäre es besser, alle Level-Ausgabe auf die gleiche Datei zu haben. Auf diese Weise erhalten Sie keine redundanten Protokolle in verschiedenen Dateien? – ddd

+0

Es hängt wirklich davon ab, wie Sie die Protokollierung verwenden. Es ist ein übliches Muster, DEBUG-Level für lokale Entwicklung zu aktivieren, aber INFO oder höher in der Produktion eingestellt zu haben, um die Rauschpegel zu reduzieren und nur wichtige Logs zu haben (normalerweise Probleme). In anderen Fällen können jedoch Ihre Protokollierungsanforderungen abweichen. Beispielsweise möchten Sie möglicherweise, dass Fehler an stderr und reguläre Ausgabe an stdout gesendet werden. Es gibt keine strengen Regeln. In Ihrem Fall klingt es so, als könnten Sie in Ordnung kommen, indem Sie alles auf dem gleichen Ziel anmelden. – m1keil

Verwandte Themen