Неожиданное поведение модуля ведения журнала Python с информацией и предупреждающими сообщениями - PullRequest
1 голос
/ 21 апреля 2020

У меня есть вопрос, касающийся модуля логирования в Python. Если я создаю экземпляр логгера и устанавливаю его уровень на INFO без добавления каких-либо обработчиков, то я ожидаю, что информационные сообщения будут напечатаны на экране. Однако в действительности предупреждающие сообщения печатаются, а информационные сообщения - нет. После явного добавления обработчика печатаются оба уровня.

Точно, следующий небольшой скрипт:

import logging


logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

logger.info("This is an info message")
logger.warning("This is a warning message")

print("*** Add a stream handler explicitly")
handler = logging.StreamHandler()
logger.addHandler(handler)

logger.info("This is an info message")
logger.warning("This is a warning message")

дает вывод

This is a warning message
*** Add a stream handler explicitly
This is an info message
This is a warning message

(проверено в Python 3.7.6 и 3.8.2).

Я ожидаю, что либо сообщения не будут напечатаны без обработчика, либо оба уровня будут напечатаны после установки уровня в INFO.

1 Ответ

0 голосов
/ 24 апреля 2020

Я предлагаю вам использовать loguru . Это действительно простой в использовании инструмент, и для меня он очень интуитивно понятен.

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

from loguru import logger

Если вы хотите изменить уровень ведения журнала, просто настроить регистратор так:

logger.remove()  # This disables the default logger
logger.add(sys.stderr, level="INFO")  # This adds a default logger (format and colors included) but at the logging level you need

И все. Все сценарии, которые используют loguru logger в вашем коде, будут настроены следующим образом. По умолчанию он выводит в stderr, но вы можете изменить его так, как вам нужно.

...