Обработчики для logger не найдены

Я новичок в python. Я пытался войти в python, и я наткнулся не удалось найти обработчиков для logger ошибка при попытке распечатать некоторое предупреждение через экземпляр logger. Ниже приведен код, который я пробовал

import logging
logger=logging.getLogger('logger')
logger.warning('The system may break down')

и я получаю эту ошибку не удалось найти обработчиков для регистратора "logger"

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

>>> import logging
>>> logging.warning('This is a WARNING!!!!')
WARNING:root:This is a WARNING!!!!
>>> 
>>> logger.warning('WARNING!!!!')
WARNING:logger:WARNING!!!!

может кто-нибудь пролить свет на то, что происходит во втором случае?

3 ответов


для регистрации некоторого сообщения через logger, в Python, по крайней мере, один обработчик должен быть добавлен к


вызов ведение журнала.basicConfig():

>>> import logging
>>> logging.basicConfig()
>>> logger = logging.getLogger('logger')
>>> logger.warning('The system may break down')
WARNING:logger:The system may break down

дополнительно к ответу phd, вызывая logging.basicConfig() - Это удобная функция, которая будет Вам по умолчанию StreamHandler и Formatter. Этого достаточно, если вы хотите быстро иметь функцию ведения журнала. Вы можете настроить его поведение, передав basicConfig аргументы:

добавить полезные параметры: вывод метки времени рядом с сообщением

logger = logging.basicConfig(level=logging.DEBUG, 
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')

это должно быть хорошо для большинства потребностей. Если вам нужно больше контроля о ваша конфигурация, вы можете добавить более сложные поведения, определив атрибуты регистратора самостоятельно.

Сложный Пример: без использования basicConfig функции

import logging
logger = logging.getLogger("mylogger")
streamHandler = logging.StreamHandler()
streamHandler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
streamHandler.setFormatter(formatter)

logger.addHandler(streamHandler)

logger.info("Files copied")
logger.warning("disk quota exceeded")
>> 2017-12-06 11:11:12, 090 - mylogger - INFO Files copied
>> 2017-12-06 11:11:12, 091 - mylogger - WARNING disk quota exceeded

следующим шагом в большей среде будет вывод нового регистратора из ранее созданного, чтобы сначала сохранить форматирование, а также поддерживать "иерархию журналов"

logger2 = logging.getLogger("mylogger.new")
logger2.info("New Logger info")
>> 2017-12-06 11:11:12, 091 - mylogger.new - New logger info

хорошая ссылка: лесозаготовки рецепты: https://docs.python.org/2/howto/logging-cookbook.html