#python #logging
#python #ведение журнала
Вопрос:
Я использую модуль ведения журнала на python. В моем main.py
файле я использую два регистратора.
- Корневой регистратор (для получения журналов из нескольких модулей в одном каталоге)
- Локальный регистратор (для регистрации конкретной информации)
Я хочу, чтобы информация о 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