2010-06-23 17 views
6

Wie kann man die Formatierung der Ausgabe des Moduls logging in Google App Engine ändern?Google App Engine/Python - Ändern der Protokollierungsformatierung

Ich habe versucht, z.B .:

log_format = "* %(asctime)s %(levelname)-8s %(message)s" 
    date_format = "%a, %d %b %Y %H:%M:%S" 

    console = logging.StreamHandler() 
    fr = logging.Formatter(log_format) 
    console.setFormatter(fr) 

    logger = logging.getLogger() 
    logger.addFilter(SuperfluousFilter()) 
    logger.addHandler(console) 

    logger.setLevel(logging.DEBUG) 
    console.setLevel(logging.DEBUG) 

    logging.error("Reconfiguring logging") 

Dies führt jedoch in zweifacher Ausfertigung Protokollausgabe: Ein mit den Logging-Handler von google/appengine/tools/dev_appserver.py (oder irgendwo in dem Google-Code), und ein von meinem neuen StreamHandler oben. Die oben genannten Code-Ausgänge:

 
ERROR 2010-06-23 20:46:18,871 initialize.py:38] Reconfiguring logging 
2010-06-23 20:46:18,871 ERROR Reconfiguring logging 

Wo die obere Linie deutlich von dev_appserver.py ist, in der unteren Zeile von meinem Code.

Also ich denke, die folgende Frage ist: Wie kann man die Formatierung von Google App Engine ändern, aber die doppelte Ausgabe vermeiden?

Vielen Dank für das Lesen.

Brian

Antwort

10

Hier ist eine Möglichkeit, die Logging-Format ohne Duplizierung Ausgabe ändern können:

# directly access the default handler and set its format directly 
logging.getLogger().handlers[0].setFormatter(fr) 

Dieses ein bisschen wie ein Hack, weil Sie direkt haben, um die in der Wurzel gespeichert handlers Liste zugreifen Logger. Das Problem ist, dass GAE automatisch logging verwendet, bevor Ihr Code jemals ausgeführt wird - dies erstellt einen Standard-Handler. Leider sehe ich nicht, wie Sie einen Verweis auf diesen Handler bekommen können, ohne direkt auf die handlers Liste wie oben zuzugreifen.

+0

Das ist sehr hilfreich. Eine andere Option, die ich in Betracht gezogen habe, 'setLevel (logging.CRITICAL)' auf dem Root-Logger auszuführen und einen neuen Logger für stderr zu erstellen. –

Verwandte Themen