#python #logging
#python #ведение журнала
Вопрос:
У меня есть пакет Python foobar
с __main__.py
внутренней частью. В __main__.py
я настраиваю ведение журнала с помощью:
from logging import config
config.dictConfig(
{
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'simple': {
'format': '%(message)s',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'simple',
},
},
'loggers': {
# No idea why is this necessary.
'foobar': {
'propagate': True,
},
},
'root': {
'level': 'DEBUG',
'handlers': [
'console',
],
},
},
)
Я просто хочу, чтобы все сообщения от всех регистраторов из всех пакетов регистрировались на консоли, уровне ОТЛАДКИ и выше. Я думал, что настройки корневого регистратора будет достаточно, но это не так. Мне пришлось добавить foobar
запись loggers
и явно пометить ее для распространения. Почему? Без этого ничего не выводится на консоль из моего модуля при его запуске python3 -m foobar
.
Я попробовал это на Python 3.8.5.
Комментарии:
1. Я не знаю, как выглядит ваш код, но если регистратор модуля foobar существует до того, как вы вызовете basicConfig, опция disable_existing_loggers отключит его.
2. Я описал это выше,
basicConfig
вызывается__main__.py
внутриfoobar
модуля inside. Означает ли это, что он существует раньше?3. Похоже, что так. Установка
disable_existing_loggers
False
работает.