Войдите в 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
объект.
Спасибо