Comment puis-je supprimer/inspecter/modifier des gestionnaires configurés pour mes enregistreurs à l'aide de la fonction fileConfig ()?
Pour la suppression, il existe la méthode Logger.removeHandler (hdlr), mais comment obtenir le gestionnaire en premier s'il a été configuré à partir d'un fichier?
logger.handlers
contient une liste avec tous les gestionnaires d'un enregistreur.
Une autre approche pourrait être d'utiliser un fichier de configuration JSON ou YAML qui est chargé dans un dictionnaire que vous pouvez ensuite visualiser/manipuler avant qu'il ne soit transmis au logger.config.
import yaml
import logging.config
with open (LOG_CONFIG, 'rt') as f:
config=yaml.safe_load(f)
config['handlers']['error_file_handler']['filename']='foo'
logging.config.dictConfig(config)
Ce code imprimera tous les enregistreurs et pour chaque enregistreur ses gestionnaires
for k,v in logging.Logger.manager.loggerDict.items() :
print('+ [%s] {%s} ' % (str.ljust( k, 20) , str(v.__class__)[8:-2]) )
if not isinstance(v, logging.PlaceHolder):
for h in v.handlers:
print(' +++',str(h.__class__)[8:-2] )
Cela imprimera les enregistreurs et les gestionnaires de votre système, y compris leurs états et niveaux.
Cela vous aidera à déboguer vos problèmes de journalisation
output:
+ [root ] {logging.RootLogger} {DEBUG}
-------------------------
-name=root
-handlers=[<logging.FileHandler object at 0x7fc599585390>, <logging.StreamHandler object at 0x7fc599585550>]
-filters=[]
-propagate=True
-level=10
-disabled=False
-parent=None
+++logging.FileHandler {NOTSET}
-stream=<_io.TextIOWrapper name='/dev/logs/myapp.log' mode='w' encoding='UTF-8'>
-mode=w
-filters=[]
-encoding=None
-baseFilename=/home/dev/logs/myapp.log
-level=0
-lock=<unlocked _thread.RLock object owner=0 count=0 at 0x7fc5a85a4240>
-delay=False
-_name=None
-formatter=<logging.Formatter object at 0x7fc599585358>
+++logging.StreamHandler {DEBUG}
-lock=<unlocked _thread.RLock object owner=0 count=0 at 0x7fc5a85a4210>
-filters=[]
-stream=<ipykernel.iostream.OutStream object at 0x7fc5aa6abb00>
-level=10
-_name=None
-formatter=<logging.Formatter object at 0x7fc5995853c8>
+ [PathFinder ] {logging.Logger} {NOTSET}
-------------------------
-name=PathFinder
-handlers=[]
-filters=[]
-manager=<logging.Manager object at 0x7fc5b09757f0>
-propagate=True
-level=0
-disabled=False
-parent=<logging.RootLogger object at 0x7fc5b09757b8>