Почему я не могу изменить уровень python logger? - PullRequest
1 голос
/ 17 марта 2020

Я пытаюсь изменить лог лог python регистратора. Но, похоже, не работает:

import logging

#50 CRITICAL
#40 ERROR
#30 WARNING <-- default
#20 INFO
#10 DEBUG
# 0 NOTSET 

logger = logging.getLogger('a')
logger.setLevel(logging.DEBUG)
print('log level', logger.getEffectiveLevel())
logger.debug('Debug') # 10
logger.info('Info') # 20
logger.warning('Warning') # 30
logger.error('Error') # 40

Вывод:

log level 10
Warning
Error

Но должно быть:

log level 10
Debug
Info
Warning
Error

Почему это и что я сделал сделать неправильно?

Ответы [ 3 ]

1 голос
/ 17 марта 2020

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

logger = logging.getLogger('a')
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG)
...

Это дает вам:

log level 10
Debug
Info
Warning
Error

logging.basicConfig() добавляет обработчик с некоторым базовым c форматированием, но обычно вы определит ваш собственный формат для регистрации.

0 голосов
/ 17 марта 2020

Хотя вы установили уровень средства ведения журнала, сообщение должно проходить через обработчик, который также имеет уровень ведения журнала. Правило гласит, что побеждает самый ограниченный уровень журнала. Есть несколько решений. В широком смысле вы можете использовать basicConfig для настройки ведения журнала root, и оно будет унаследовано дочерними регистраторами, такими как "a". Или установите обработчик для «а».

import logging

#50 CRITICAL
#40 ERROR
#30 WARNING <-- default
#20 INFO
#10 DEBUG
# 0 NOTSET 

# option - set a basic config for root logger and its descendents
#logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger('a')
logger.setLevel(logging.DEBUG)

# option = create a handler for this logger
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)

print('log level', logger.getEffectiveLevel())
logger.debug('Debug') # 10
logger.info('Info') # 20
logger.warning('Warning') # 30
logger.error('Error') # 40
0 голосов
/ 17 марта 2020

Один из способов решить эту проблему - установить конфигурацию basi c перед регистрацией сообщений. Как это:

logging.basicConfig()
...