Как удалить/проверить/изменить обработчики, настроенные для моих регистраторов, используя функцию fileConfig()?
Для удаления существует метод Logger.removeHandler(hdlr), но как получить обработчик на первом месте, если он был настроен из файла?
Как удалить/проверить/изменить обработчики, настроенные для моих регистраторов, используя функцию fileConfig()?
Для удаления существует метод Logger.removeHandler(hdlr), но как получить обработчик на первом месте, если он был настроен из файла?
logger.handlers
содержит список со всеми обработчиками регистратора.
Другим подходом может быть использование конфигурационного файла 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)
Этот код напечатает все регистраторы и для каждого регистратора его обработчики
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>