Méfiez-vous des disable_existing_loggers lors de la configuration de la journalisation Python

Il y avait un avertissement dans le document officiel Paramètres de l'environnement de journalisation, mais j'en étais complètement accro, alors je l'ai écrit comme un article. Je vais le laisser.

Les modules de journalisation Python sont configurés en fonction de logging.config.fileConfig (), qui est configuré en fonction des fichiers de configuration au format ini et des informations de configuration de type dict, en plus d'être configurés en appelant des méthodes telles que addHandler (). Il peut être configuré en utilisant logging.config.dictConfig ().

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')  #Production

Lors de l'utilisation de la journalisation Python, l'idiome est d'écrire logger = logging.getLogger (__ nom __) au début du module. Cependant, la configuration de journalisation que j'ai mentionnée plus tôt rompt ce code.

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')  #Pas de sortie

Cela est dû au fait que fileConfig et dictConfig étaient initialement destinés à configurer la journalisation dans son ensemble, en désactivant le journal déjà généré par défaut.

L'option pour personnaliser ce comportement est disable_existing_loggers, où True signifie le comportement par défaut et False signifie ne pas le désactiver. Cette option peut être spécifiée comme argument de mot-clé pour fileConfig ou comme élément du dict à transmettre pour dictConfig.

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')  #Production

dictConfig a également une option appelée incrémental, qui ajoute simplement les gestionnaires et les filtres fournis avec le journal existant, sans les supprimer.

Recommended Posts

Méfiez-vous des disable_existing_loggers lors de la configuration de la journalisation Python
Python - Démarrage rapide de la journalisation
Configuration de l'authentification de base à l'aide de Python @Lambda
Remarques sur la configuration d'un conteneur Docker pour l'utilisation de JUMAN ++, KNP, python
Journalisation Python
Configuration de l'authentification Digest à l'aide de Python @Lambda
Encodage de caractères lors de l'utilisation du module csv de python 2.7.3
[Python] Une compréhension approximative du module de journalisation
[Note] L'histoire de la configuration du SDK pour Python d'Azure IoT Hub sur Linux
Les bases de Python ①
Bases de python ①
Copie de python
Introduction de Python
De la configuration du Raspberry Pi à l'installation de l'environnement Python
Un mémorandum lors de l'écriture de code expérimental ~ Se connecter en python
Remarque lors de la mise de lxml du package python dans ubuntu 14.04
Récapitulatif des méthodes Pandas utilisées lors de l'extraction de données [Python]
Examen de atcoder ABC158, jusqu'à la question E (Python)
Mémo de "Cython-Accélérer Python en fusionnant avec C"