Weitergabe der Python-Protokollierung
Dieses Tutorial demonstriert die Verwendung von LevelFilter
, um zu zeigen, wie Nachrichten eines bestimmten Logger-Namens einer bestimmten Stufe und höher (z. B. INFO
und höher) an einen bestimmten Log-Handler protokolliert werden.
Weitergabe der Python-Protokollierung
Wir haben bereits einen Artikel geschrieben, in dem wir über das Modul Protokollierung
, seine Bedeutung, verschiedene Protokollierungsebenen sprechen und die lokale und globale Verwendung des Moduls Protokollierung
demonstrieren. Hier lernen wir, wie wir bestimmte Nachrichten der Ebene unterhalb der aktuellen Loggerebene weitergeben können.
Was bedeutet das? Das bedeutet, dass wir Nachrichten eines bestimmten Logger-Namens, eines bestimmten Levels und höher (sagen wir INFO
und höher) an einen bestimmten Log-Handler (nehmen wir einen Stream-Handler oder einen File-Handler) protokollieren wollen.
Beispielcode:
import logging
class LevelFilter(logging.Filter):
def __init__(self, level):
self.level = level
def filter(self, record):
return record.levelno >= self.level
def perform_logging(turn):
logger = logging.getLogger("extra")
logger.info("some information turn %d" % turn)
logger.debug("this is the debug fudge turn %d" % turn)
rootLogger = logging.getLogger()
handler = logging.StreamHandler()
rootFormatter = logging.Formatter("root - %(levelname)s: %(msg)s")
handler.setFormatter(rootFormatter)
rootLogger.addHandler(handler)
rootLogger.setLevel(logging.DEBUG)
perform_logging(1)
extraLogger = logging.getLogger("extra")
extraHandler = logging.StreamHandler()
extraFormatter = logging.Formatter("extra - %(levelname)s: %(msg)s")
extraHandler.setFormatter(extraFormatter)
extraLogger.addHandler(extraHandler)
extraHandler.addFilter(LevelFilter(logging.INFO))
extraLogger.setLevel(logging.DEBUG)
perform_logging(2)
AUSGANG:
root - INFO: some information turn 1
root - DEBUG: this is the debug fudge turn 1
extra - INFO: some information turn 2
root - INFO: some information turn 2
root - DEBUG: this is the debug fudge turn 2
In diesem Beispiel erstellen wir zwei Logger: einen root
-Logger und einen benannten Logger (hier extra
).
Wir hängen den logging.StreamHandler
für einen root
-Logger an und setzen das Log-Level auf logging.DEBUG
. Danach hängen wir einen Handler an einen benannten Logger an und setzen dessen Logging-Level auf logging.INFO
.
Jetzt geht es darum, wie wir Nachrichten einer bestimmten Ebene unterhalb der aktuellen Ebene verbreiten. Dazu fügen wir mit LevelFilter
jedem Handler einen Filter hinzu, der nur das jeweilige Level zulässt.