#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")