Обработчики журналов исчезают, когда я пытаюсь получить дочерний регистратор с помощью метода Logger.getChild () - PullRequest
0 голосов
/ 06 июня 2019

У меня есть корневой логгер с некоторыми обработчиками (скажем, SysLogHandler).

И я хочу получить дочерний регистратор от корневого регистратора, вызвав Logger.getChild(__name__), но когда я это сделаю, я получил новый регистратор без обработчиков.Что я делаю не так?Спасибо!

import logging
from logging import handlers


sysh = handlers.SysLogHandler()

logger = logging.getLogger()
logger.addHandler(sysh)
logger.handlers  # [<SysLogHandler (NOTSET)>] - everything is ok

c = logger.getChild('some_name')
c.handlers  # []  where is the handler(SysLogHandler) from parent(root) logger???

1 Ответ

1 голос
/ 06 июня 2019

getChild делает то же самое, что logging.getLogger.Оба вызывают метод getLogger в экземпляре logging.Manager.
Менеджер либо возвращает существующий регистратор, который был зарегистрирован в его атрибуте loggerDict, либо создает новыйрегистратор, регистрирует и возвращает его.В последнем случае новый регистратор должен быть настроен вызывающим абонентом.

getChild не предназначен для создания клона регистратора, для которого он был вызван.Он предназначен как

[...] удобный метод, полезный, когда имя родительского регистратора именуется, например, __name__ вместо буквенной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...