Achten Sie beim Konfigurieren der Python-Protokollierung auf disable_existing_loggers

Es gab eine Warnung im offiziellen Dokument Einstellungen der Protokollierungsumgebung, aber ich war völlig süchtig danach und habe es als Artikel geschrieben. Ich werde es verlassen.

Zusätzlich zur Konfiguration durch Aufrufen von Methoden wie addHandler () wird das Python-Protokollierungsmodul basierend auf logging.config.fileConfig () konfiguriert, das basierend auf der Konfigurationsdatei im INI-Format konfiguriert wird, und Konfigurationsinformationen zum Diktiertyp. Es kann mit logging.config.dictConfig () konfiguriert werden.

import logging.config

logging.config.dictConfig({
    'version': 1,
    'handlers': {
        'default': {
            'class': 'logging.StreamHandler',
            'level': 'DEBUG',
            'stream': 'ext://sys.stderr',
            }
    },
    'root': {
        'level': 'DEBUG',
        'handlers': ['default'],
    }
})

logger = logging.getLogger('example')
logger.info('Hello')  #Ausgabe

Bei Verwendung der Python-Protokollierung lautet die Redewendung "logger = logging.getLogger (__ name __)" am Anfang des Moduls. Das zuvor erwähnte Protokollierungssetup unterbricht diesen Code jedoch.

import logging.config

logger = logging.getLogger('example')

logging.config.dictConfig({
    'version': 1,
    'handlers': {
        'default': {
            'class': 'logging.StreamHandler',
            'level': 'DEBUG',
            'stream': 'ext://sys.stderr',
            }
    },
    'root': {
        'level': 'DEBUG',
        'handlers': ['default'],
    }
})

logger.info('Hello')  #Nicht ausgegeben

Dies liegt daran, dass fileConfig und dictConfig ursprünglich dazu gedacht waren, die Protokollierung als Ganzes zu konfigurieren und den bereits generierten Protokollierer standardmäßig zu deaktivieren.

Die Option zum Anpassen dieses Verhaltens ist disable_existing_loggers, wobei True das Standardverhalten und False das Nicht-Deaktivieren bedeutet. Diese Option kann als Schlüsselwortargument für fileConfig oder als Element des Diktats angegeben werden, das für dictConfig übergeben werden soll.

import logging.config

logger = logging.getLogger('example')

logging.config.dictConfig({
    'version': 1,
    'handlers': {
        'default': {
            'class': 'logging.StreamHandler',
            'level': 'DEBUG',
            'stream': 'ext://sys.stderr',
            }
    },
    'root': {
        'level': 'DEBUG',
        'handlers': ['default'],
    },
    'disable_existing_loggers': False,
})

logger.info('Hello')  #Ausgabe

dictConfig hat auch eine Option namens inkrementell, die nur die Handler und Filter hinzufügt, die mit dem vorhandenen Logger geliefert werden, ohne sie zu entfernen.

Recommended Posts

Achten Sie beim Konfigurieren der Python-Protokollierung auf disable_existing_loggers
Python - Schneller Start der Protokollierung
Einrichten der Basisauthentifizierung mit Python @Lambda
Hinweise zum Einrichten eines Docker-Containers für die Verwendung von JUMAN ++, KNP, Python
Python-Protokollierung
Einrichten der Digest-Authentifizierung mit Python @Lambda
Zeichenkodierung bei Verwendung des CSV-Moduls von Python 2.7.3
[Python] Ein grobes Verständnis des Protokollierungsmoduls
[Hinweis] Die Geschichte des Einrichtens des SDK für Python von Azure IoT Hub unter Linux
Python-Grundlagen ①
Grundlagen von Python ①
Kopie von Python
Einführung von Python
Vom Einrichten des Raspberry Pi bis zur Installation der Python-Umgebung
Ein Memorandum beim Schreiben von experimentellem Code ~ Anmelden in Python
Beachten Sie, wenn Sie lxml des Python-Pakets in Ubuntu 14.04 einfügen
Zusammenfassung der beim Extrahieren von Daten verwendeten Pandas-Methoden [Python]
Überprüfung des Atcoders ABC158 bis Frage E (Python)
Memo von "Cython beschleunigt Python durch Fusion mit C"