Python: Protokollierung.streamhandler ist nicht das versenden von logs auf stdout
Möchte ich StreamHandler-logging-handler für python.
Was ich versucht habe ist,
import logging
import sys
mylogger = logging.getLogger("mylogger")
h1 = logging.StreamHandler(stream=sys.stdout)
h1.setLevel(logging.DEBUG)
mylogger.addHandler(h1)
# now trying to log with the created logger
mylogger.debug("abcd") # <no output>
mylogger.info("abcd") # <no output>
mylogger.warn("abcd") # abcd
Bin ich etwas fehlt ? Oder tun, jede falsch ?
Warum die INFO und DEBUG-logs kommen nicht auf STDOUT ?
InformationsquelleAutor Aashish P | 2013-07-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die Ebene der logger, nicht nur die Ebene der handler:
Hier ist eine schöne Grafik von der Protokollierung, workflow, wo Sie sehen können, dass entweder der logger und handler überprüfen Sie für den log-level:
http://docs.python.org/2/howto/logging.html#logging-flow
Den Standard -
logLevel
istWARNING
, so dass selbst wenn Sie das Niveau von Ihrem handlerDEBUG
, die Nachricht wird nicht durchkommen, da Ihre logger unterdrückt (er ist auch standardmäßigWARNING
).Durch die Art und Weise, können Sie einige grundlegende Formatierungen mit
Formatter
:Geben Sie die Ausgabe
Nein, es ist nicht falsch, wie Sie sehen können, in docs.python.org/2/howto/logging.html#logging-flow der logger übergibt die Protokollierung Aufruf an seinen handler, nachdem er überprüft den Füllstand. Also, wenn das level des Loggers festgelegt ist
WARN
, und einDEBUG
Nachricht ist angekommen, da geht nichts durch. Wenn eine Nachricht übergibt, der logger die Hände aus, um den handler, der hat auch eine logging-Typ "filter".nützlich, Ihnen bei der Lösung meiner Frage.
InformationsquelleAutor tamasgal