Войдите в sys.stdout из модуля регистрации - PullRequest
0 голосов
/ 28 января 2019

У меня есть следующий простой тестовый скрипт:

import logging
import sys


logger = logging.getLogger(__name__)
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.INFO)
handler.setFormatter(logging.Formatter('%(name)s - %(levelname)s - %(message)s'$
logger.addHandler(handler)


logger.info('Hello World!')
logger.warning('Bad!')

Я запускаю этот скрипт с python test.py в командной строке.Я получаю:

__main__ - WARNING - Bad!

Когда я ожидал получить:

__main__ - WARNING - Bad!
__main__ - INFO - Hello World!

Например, я ожидал, что оба сообщения журнала info и warning будут напечатаны в окне консоли, нотолько сообщение warning.Как получилось?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Это должно работать?

import logging
import sys


logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(logging.Formatter('%(name)s - %(levelname)s - %(message)s'))
logger.addHandler(handler)


logger.info('Hello World!')
logger.warning('Bad!')

Вы должны установить setLevel для объекта logger.

Спасибо

0 голосов
/ 28 января 2019

Я думаю, Какой смысл setLevel в обработчике журналирования Python? содержит ответ.

Вам нужно setLevel на logger и его уровень (по умолчанию ПРЕДУПРЕЖДЕНИЕ) не будет разрешать сообщения от своих обработчиков с более низким уровнем, чем установлено в parent-logger.

Имеется обработчик для фильтрации сообщений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...