web-dev-qa-db-fra.com

journalisation supprimer / inspecter / modifier les gestionnaires configurés par fileConfig ()

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?

57
Pawel Furmaniak

logger.handlers contient une liste avec tous les gestionnaires d'un enregistreur.

52
leoluk

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)
3
perlyking

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>
2
Mickey Perlstein