Почему мои сообщения журнала дважды отображаются в корневом файле журнала?

#python #logging

#python #ведение журнала

Вопрос:

У меня есть script.py файл, в который я импортирую модуль запросов. Я заметил, что, используя root logger на уровне DEBUG, я могу регистрировать все запросы GET, что приятно.

Но я хотел бы иметь другой файл журнала для регистрации других сообщений на информационном уровне. Итак, я сделал это:

 # root logger to log all GET requests
import logging
logging.basicConfig(filename= "allrequests.log", level=logging.DEBUG, 
                    format='%(asctime)s: %(levelname)s: %(message)s')

# second logger to log only INFO
formatter = logging.Formatter('%(asctime)s: %(levelname)s: %(message)s')
handler = logging.FileHandler('onlyinfo.log')
info_logger = logging.getLogger('second_logger')
info_logger.setLevel(logging.INFO)
info_logger.addHandler(handler)
  

проблема в том, что теперь, когда я использую:

 info_logger.info('my message')
  

он зарегистрирует это дважды в первом файле журнала и один раз во втором файле.

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

Другими словами, я хотел бы регистрировать все сообщения (сообщения уровня ОТЛАДКИ и ИНФОРМАЦИИ) в одном файле журнала и только ИНФОРМАЦИОННЫЕ сообщения в другом файле журнала. Как я могу это сделать?

Комментарии:

1. basicConfig добавляется обработчик к корневому регистратору, и вы подключаете его к вспомогательному регистратору. Оба будут вызваны, когда подрегистратор propagate установлен.

2. Это хорошая практика? Как еще я могу наследовать некоторые сообщения от root logger? @KlausD.