In einem Python-Skript, das ich schreibe, versuche ich, Ereignisse mithilfe des Protokollierungsmoduls zu protokollieren. Ich habe den folgenden Code, um meinen Logger zu konfigurieren:
ERROR_FORMAT = "%(levelname)s at %(asctime)s in %(funcName)s in %(filename) at line %(lineno)d: %(message)s"
DEBUG_FORMAT = "%(lineno)d in %(filename)s at %(asctime)s: %(message)s"
LOG_CONFIG = {'version':1,
'formatters':{'error':{'format':ERROR_FORMAT},
'debug':{'format':DEBUG_FORMAT}},
'handlers':{'console':{'class':'logging.StreamHandler',
'formatter':'debug',
'level':logging.DEBUG},
'file':{'class':'logging.FileHandler',
'filename':'/usr/local/logs/DatabaseUpdate.log',
'formatter':'error',
'level':logging.ERROR}},
'root':{'handlers':('console', 'file')}}
logging.config.dictConfig(LOG_CONFIG)
Wenn ich versuche auszuführen logging.debug("Some string")
, erhalte ich keine Ausgabe an die Konsole, obwohl auf dieser Seite in den Dokumenten angegeben ist , dass logging.debug
der Root-Logger die Nachricht ausgeben soll. Warum gibt mein Programm nichts aus und wie kann ich das beheben?
level != NOTSET
oder das Stammverzeichnis zu finden (falls keines gefunden wird). Die Wurzel hatWARNING
standardmäßig eine Ebene. Dies ist in dem Abschnitt geschrieben, den Sie mit (Logger.setLevel
) verlinkt haben .logging
anrufen müssenlogging.basicConfig()
. Andernfalls könnten Sie sehr überrascht sein, dass untergeordnete Logger nichts drucken. Protokollierungsfunktionen auf dem Root-Logger rufen es träge auf.Viele Jahre später scheint es immer noch ein Usability-Problem mit dem Python-Logger zu geben. Hier einige Erklärungen mit Beispielen:
Eine häufige Quelle der Verwirrung ist ein schlecht initialisierter Root-Logger. Bedenken Sie:
Ausgabe:
Abhängig von Ihrer Laufzeitumgebung und den Protokollierungsstufen wird die erste Protokollzeile (vor der Grundkonfiguration) möglicherweise nirgendwo angezeigt .
quelle
logging.basicConfig( filename='logging.txt', level=logging.DEBUG) logger = logging.getLogger() logger.info('Test B') logging.info('Test A')
logger = logging.getLogger()
der Pegel auf WARNUNG gesetzt ist, obwohl ich den Pegel als angegeben habeDEBUG
. Weißt du was ich falsch mache?Für alle hier, die eine supereinfache Antwort wünschen: Stellen Sie einfach die gewünschte Ebene ein. Ganz oben in all meinen Skripten habe ich Folgendes eingefügt:
Um dann etwas auf oder über dieser Ebene anzuzeigen:
Es handelt sich um einen hierarchischen Satz von fünf Ebenen, sodass Protokolle auf der von Ihnen festgelegten Ebene oder höher angezeigt werden . Wenn Sie also einen Fehler anzeigen möchten, können Sie ihn verwenden
logging.error("The plumbus is broken")
.Die Ebene, in der Reihenfolge der Schwere zunimmt, sind
DEBUG
,INFO
,WARNING
,ERROR
, undCRITICAL
. Die Standardeinstellung istWARNING
.Dies ist ein guter Artikel, der diese Informationen enthält, die besser ausgedrückt werden als meine Antwort:
https://www.digitalocean.com/community/tutorials/how-to-use-logging-in-python-3
quelle
Vielleicht versuchen Sie das? Es scheint, dass das Problem gelöst ist, nachdem alle Handler in meinem Fall entfernt wurden.
quelle
SyntaxError: invalid syntax