Python3 & PyCharm-уровни ведения журнала отладки в run/debug

Я только начинаю с PyCharm, есть ли способ показать предупреждения debug & info?

import logging
logger = logging.getLogger('tipper')
logger.setLevel(logging.DEBUG)
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

предупреждение, ошибка, критическое все показать:

/home/username/someproject/.someprojectenv/bin/python3/home/username/someproject/go.py
warn message
error message
critical message

Process finished with exit code 0

однако отладка, информация не отображается.

2 ответов


проблема не имеет ничего общего с PyCharm, но с тем, как работает конфигурация регистрации. Если вы попытаетесь написать код, показанный в обычном интерактивном сеансе python, вы получите тот же результат:

>>> import logging
>>> logger = logging.getLogger('tipper')
>>> logger.setLevel(logging.DEBUG)
>>> logger.debug('debug message')
>>> logger.info('info message')
>>> logger.warn('warn message')
warn message
>>> logger.error('error message')
error message
>>> logger.critical('critical message')
critical message

проблема в том, что задание logger ' s уровень не достаточно! Вы также должны добавить обработчик к регистратору, иначе регистратор просто перешлет сообщение вверх по цепочке. Сообщения будут в конечном итоге в root logger, который имеет, по умолчанию, a уровень logging.WARN и таким образом отбрасывает DEBUG сообщения уровня.

однако, если вы добавите обработчик в logger все прекрасно работает:

>>> logger.addHandler(logging.StreamHandler())
>>> logger.debug('test')
test

вы можете установить более одного обработчика для каждого регистратора, и каждый обработчик может иметь другой уровень ведения журнала.

посмотреть этой вопрос для получения дополнительной информации об уровнях logger и handler. Я бы предложил также внимательно прочитать документацию для logging модуль и различные руководства (например,logging How-To, потому что он имеет очень расширенные настройки.

также из python3.2 есть dictConfig функция, которая позволяет указать конфигурацию для вашей иерархии ведения журнала как словарь, без необходимости вручную создавать каждый обработчик и регистратор вручную.


очень грязный обходной путь, чтобы запустить его, - перезаписать функции ведения журнала. Это может пригодиться, иногда вы просто хотите, чтобы быстро взглянуть, не устанавливая весь уровень отладки.

!НЕ ИСПОЛЬЗУЙТЕ ЭТО В ПРОИЗВОДСТВЕ!

logging.debug = print
logging.info = print