Weitergabe der Python-Protokollierung

Mehvish Ashiq 21 Juni 2023
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.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Verwandter Artikel - Python Logging