Конфигурация одного логгера независимот от остальных

У меня есть проект, там ведётся логгирование. Мне необходимо добавить ещё один логгер, которые будет сконфигурирован независимо от остальных (основное требование - независимые логи в отдельный фай). То есть что-то вроде:

import logging

logger_1 = logging.getLogger('Logger1')
logger_2 = logging.getLogger('Logger2')

STRING_FORMAT = '{name} {levelname:<8} > {msg}'
LEVEL = logging.DEBUG

logger_1.basicConfig(
    level=LEVEL,
    filename='errors.log',
    filemode='a',
    style='{',
    format=STRING_FORMAT,
)

logger_1.error('Error from <logger 1>')
# Файл   :  Logger1 ERROR    > Error from <logger 1>

logger_2.error('Error from <logger 2>')
# Консоль:  Error from <logger 2>

logger_1.debug('Error from <logger 1>')
# Файл   :  Logger1 DEBUG    > Debug from <logger 1>

При настройке logging.basicConfig у меня изменяются настройки всех остальных логгеров, и они тоже начинают писать в файл, а у отдельных логгеров нет этой настройки. Могу я и как настроить вывод одного из логгеров в другое место (а, желательно, формат и уровень тоже), не изменяя настроек других?


Ответы (1 шт):

Автор решения: Michael Tetelev

Оригинал ответа

Код, который исправляет эту ситуацию:

import logging


def create_logger(name, file=None, format_=None, level=logging.INFO):
    logger = logging.getLogger(name)
    logger.setLevel(level)
    if file is not None:
        handler = logging.FileHandler(file)        
        handler.setFormatter(format_)
        logger.addHandler(handler)
    return logger


formatter = logging.Formatter('{name} {levelname:<8} > {msg}', style='{')
level = logging.DEBUG

logger_1 = create_logger('Logger1', 'errors.log', formatter, level)
logger_2 = create_logger('Logger2')

logger_1.error('Error from <logger 1>')
logger_2.error('Error from <logger 2>')
logger_1.debug('Error from <logger 1>')
→ Ссылка