Настройка только корневого ведения журнала Python

#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 работает.