Gibt es eine Möglichkeit, die Python-Protokollierung mithilfe des logging
Moduls automatisch an stdout auszugeben, zusätzlich zu der Protokolldatei, in die sie verschoben werden sollen? Zum Beispiel würde ich alle Anrufe gerne logger.warning
, logger.critical
, logger.error
um ihre beabsichtigten Orte zu gehen , sondern zusätzlich immer kopiert werden stdout
. Dies dient dazu, doppelte Nachrichten wie: zu vermeiden.
mylogger.critical("something failed")
print "something failed"
Antworten:
Die gesamte Protokollausgabe wird von den Handlern verarbeitet. Fügen Sie einfach ein
logging.StreamHandler()
zum Root-Logger hinzu.Hier ist ein Beispiel für die Konfiguration eines Stream-Handlers (
stdout
anstelle der Standardeinstellungstderr
) und das Hinzufügen zum Root-Logger:quelle
stdout
?logging.Formatter
.Der einfachste Weg, sich bei stdout anzumelden:
quelle
stream=sys.stdout
für mich immer noch für die Protokollierung an der Konsole funktionieren.Es ist möglich, mehrere Handler zu verwenden.
Weitere Informationen finden Sie unter: https://docs.python.org/2/howto/logging-cookbook.html
quelle
sys.stdout
Parameter inch = logging.StreamHandler()
Sie können zwei Handler für file und stdout erstellen und dann einen Logger mit
handlers
Argument to erstellenbasicConfig
. Es kann nützlich sein, wenn Sie für beide Handler dieselbe log_level- und Formatausgabe haben:quelle
Der einfachste Weg, sich in einer Datei und in stderr anzumelden:
quelle
Hier ist eine Lösung, die auf der leistungsstarken, aber schlecht dokumentierten
logging.config.dictConfig
Methode basiert . Anstatt jede Protokollnachricht an zu sendenstdout
, werden Nachrichten mit ProtokollstufeERROR
und höher anstderr
und alles andere an gesendetstdout
. Dies kann nützlich sein, wenn andere Teile des Systemsstderr
oder hörenstdout
.quelle
Da niemand einen ordentlichen Zwei-Liner geteilt hat, werde ich meinen eigenen teilen:
quelle
Hier ist ein äußerst einfaches Beispiel:
Die Ausgabe zeigt "test msg" auf stdout und auch in der Datei.
quelle