вопрос ведения журнала на python

#python

#питон #python

Вопрос:

У меня есть вопрос о стандартном механизме ведения журнала python. Итак, если я использую logging.config.fileConfig для загрузки моего файла конфигурации, то я создаю регистраторы для некоторых модулей, используя logging.getLogger, тестирую их сразу после создания, и они работают. Теперь, если я снова вызову logging.config.fileConfig с тем же файлом конфигурации и создам регистраторы для какого-нибудь другого модуля, будут ли предыдущие по-прежнему работать? В основном для следующей логики:

 logging.config.fileConfig(config_file)
logger1 = logging.getLogger(module1)
logger2 = logging.getLogger(module2)
logging.config.fileConfig(config_file)
logger3 = logging.getLogger(module3)
  

config_file является одним и тем же в обоих вызовах. Должны ли logger1 и logger2 быть функциональными ? Как насчет того, отличается ли config_file в этих вызовах? В настоящее время мои logger1 и logger2 не работают после того, как я загружаю новый config_file. Итак, первый шаг — проверить, является ли это нормальным поведением. Если да, то возможно ли заставить это работать без объединения двух конфигурационных файлов в один большой?

С уважением, Богдан

Ответ №1:

Конфигурационные файлы предназначены для полной замены существующей конфигурации тем, что есть в конфигурации — любые регистраторы, которые не названы в конфигурации, или их дочерние устройства, отключаются fileConfig() , как описано здесь . вы можете предотвратить это отключение, но только в последних версиях Python. Обычно не рекомендуется вызывать fileConfig() несколько раз в программе, если только у вас нет особой необходимости в этом. Это не запрещено, но и не обычно.

Обычное использование включает настройку обработчиков в корневом регистраторе и, возможно, в одном или двух регистраторах верхнего уровня; применимо ли это к вам?

Комментарии:

1. Эй, обработчики одинаковы для всех определенных регистраторов, но мне действительно нужно другое qualname для каждого модуля. Передав «disable_existing_loggers = False», я получил желаемый результат.