ведение журнала удаления / проверки / изменения обработчиков, настроенных с помощью fileConfig () - PullRequest
48 голосов
/ 03 сентября 2010

Как я могу удалить / проверить / изменить обработчики, настроенные для моих регистраторов, используя функцию fileConfig ()?

Для удаления есть метод Logger.removeHandler (hdlr), но как сначала получить обработчикместо, если оно было настроено из файла?

Ответы [ 3 ]

52 голосов
/ 03 сентября 2010

logger.handlers содержит список со всеми обработчиками регистратора.

3 голосов
/ 16 июня 2016

Другим подходом может быть использование файла конфигурации JSON или YAML, который загружается в словарь, который затем можно просматривать / манипулировать до его передачи в 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)
2 голосов
/ 28 марта 2019

Этот код распечатает все регистраторы и для каждого регистратора его обработчики

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] )

Это распечатает регистраторы и обработчики в вашей системе, включая их состояния и уровни.

Это поможет вам отладить проблемы с журналированием

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...