Войдите в sys.stdout из модуля регистрации

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

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 ответа

Решение

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

Вам нужно setLevel на logger Сам по себе его уровень (по умолчанию WARNING) не позволяет получать сообщения от его обработчиков с более низким уровнем, чем установлено в parent-logger.

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

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

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 объект.

Спасибо

Другие вопросы по тегам