Отдельный локальный регистратор с корневым журналом python

#python #logging

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

Вопрос:

Я использую модуль ведения журнала на python. В моем main.py файле я использую два регистратора.

  1. Корневой регистратор (для получения журналов из нескольких модулей в одном каталоге)
  2. Локальный регистратор (для регистрации конкретной информации)

Я хочу, чтобы информация о local logger была отдельной от root logger . Но когда я создаю отдельный регистратор. Информация о local logger также присутствует в информации о корневом регистраторе.

Вот пример того, как я это делаю

 # main.py
import logging

def setup_logger(filename, name = ''):
    if name == '':
        logging.basicConfig(filename=filename,
                            format='%(asctime)s %(funcName)s %(levelname)s %(message)s',
                            filemode='a')
        logger = logging.getLogger()
    else:
        """
        handler = logging.FileHandler(filename, mode = 'a')
        handler.setFormatter(logging.Formatter('%(asctime)s %(funcName)s %(levelname)s %(message)s'))
        logger = logging.getLogger(name)
        logger.addHandler(handler)
        """
        formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
        handler = logging.FileHandler(filename)
        handler.setFormatter(formatter)

        logger = logging.getLogger(name)
        logger.setLevel(logging.DEBUG)
        logger.addHandler(handler)

        return logger
    logger.setLevel(logging.DEBUG)
    return logger

logger = setup_logger('main.log')
local_logger = setup_logger('local_log.log', 'local_log')
 
 # other file under root log
logger = logging.getLogger("__main__."   __name__)
 

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

1. Вы смотрели на иерархию регистраторов и как ваши регистраторы связаны с корневым регистратором?

2. да, я хочу, чтобы local_logger не зависел от иерархии журналов. Но каким-то образом это связано с root_logger. Я не уверен, как отличить эти два.

Ответ №1:

Вы должны остановить распространение, если не хотите, чтобы локальные регистраторы отправляли свои журналы обработчикам корневых регистраторов:

 logger.propagate = False
 

Эта часть документации хорошо объясняет это: https://docs.python.org/3/howto/logging.html#logging-flow