Ведение журнала - изменение уровня с INFO на DEBUG отключает все сообщения журнала - PullRequest
0 голосов
/ 09 января 2020

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

У меня есть регистратор, определенный в начале сценария:

import logging

log_file = f'test.log'
logger = logging.getLogger(__name__)
f_handler = logging.FileHandler(log_file)
f_handler.setLevel(logging.INFO)
f_format = logging.Formatter(fmt='%(asctime)s - %(levelname)s - %(message)s',
                             datefmt='%d/%m/%Y %H:%M:%S')
f_handler.setFormatter(f_format)
logger.addHandler(f_handler)
logger.info('Initialising.')

Затем во всем коде у меня есть несколько вызовов этому логгеру - некоторые info, некоторые exceptions и warnings.

Тем не менее, по какой-то причине при текущей настройке я получаю только один warning сообщение, если есть, хотя я думал, что должен получать все сообщения выше, включая INFO уровень.

Чтобы попытаться проверить это, я переключил регистратор на DEBUG, но получил пустой журнал как результат.

По крайней мере, я ожидаю увидеть следующие info сообщения в журнале:

self.logger.info('Initialising.') #Right in the __init__ of the class
self.logger.info(f'Using {self.export_file} for export data.') #This one should always be printing unless script fails at the very start
self.logger.info(f'Using {self.model_file} model to predict values.') #Same with this one
self.logger.info('Encoding into a model completed successfully.') #This one as well if script completes successfully, which it normally does

Я, должно быть, что-то делаю не так, но я не уверен, что точно.

1 Ответ

2 голосов
/ 09 января 2020

из setLevel:

При создании регистратора устанавливается уровень NOTSET (что приводит к обработке всех сообщений, когда регистратором является root logger или делегирование родителю, когда регистратор не является root logger). Обратите внимание, что регистратор root создается с уровнем WARNING .

Также обратите внимание на схему потока регистрации здесь .

Вы должны позвонить self.logger.setLevel(logging.INFO), чтобы настроить root уровень логгера.

...