пакет ведения журнала — общий файл журнала между основным и модулями — python 3

#python #python-3.x #logging #module

#python #python-3.x #ведение журнала #модуль

Вопрос:

Мой проект состоит из main.py основной скрипт и модуль aaa.py . Я успешно настроил процедуру ведения журнала, используя пакет ведения журнала в main.py , также указав имя файла журнала.

Какой самый чистый / «правильный» способ разрешить функциям, содержащимся в aaa.py записывать в один и тот же файл журнала?

Ответ №1:

Используйте корневой регистратор в main.py определяя

 logger = logging.getLogger()
fh = logging.FileHandler("path/to/file")
logger.addHandler(fh)
  

Затем используйте модульный регистратор в aaa.py путем определения

 logger = logging.getLogger(__name__)
  

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

Цитирую из документов

Дочерние регистраторы передают сообщения обработчикам, связанным с их регистраторами-предками. Из-за этого нет необходимости определять и настраивать обработчики для всех регистраторов, используемых приложением. Достаточно настроить обработчики для регистратора верхнего уровня и создать дочерние регистраторы по мере необходимости.

Ответ №2:

Если вы вызываете только один скрипт на Python одновременно (main.py)
затем вы просто можете определить свою конфигурацию ведения журнала один раз; например:
logging.basicConfig(filename=logfilepath, format='%(levelname)s:%(message)s')

и вызывайте его везде, где вы хотите в модулях, например
logging.<level>("log_string")