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