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