Подтвердить что ты не робот

Используя dictConfig в протоколе python, необходимо создать регистратор с другим файлом, чем определено в dict.

У меня есть LOG_SETTINGS dict, который выглядит так:

LOG_SETTINGS = {
'version': 1,
'handlers': {
    'console': {
        'class': 'logging.StreamHandler',
        'level': 'INFO',
        'formatter': 'detailed',
        'stream': 'ext://sys.stdout',
    },
    'file': {
        'class': 'logging.handlers.RotatingFileHandler',
        'level': 'INFO',
        'formatter': 'detailed',
        'filename': '/tmp/junk.log',
        'mode': 'a',
        'maxBytes': 10485760,
        'backupCount': 5,
    },

},
'formatters': {
    'detailed': {
        'format': '%(asctime)s %(module)-17s line:%(lineno)-4d ' \
        '%(levelname)-8s %(message)s',
    },
    'email': {
        'format': 'Timestamp: %(asctime)s\nModule: %(module)s\n' \
        'Line: %(lineno)d\nMessage: %(message)s',
    },
},
'loggers': {
    'extensive': {
        'level':'DEBUG',
        'handlers': ['file',]
        },
}
}

В моем коде я делаю следующее:

logging.config.dictConfig(LOG_SETTINGS)

logger = logging.getLogger('extensive')
logger.info("This is from Runner {0}".format(self.default_name))

logger2 = logging.getLogger('extensive')
logfile = logging.FileHandler("test.log")
logger2.addHandler(logfile)

logger2.info("This is from Runner {0} to the new   file.".format(self.default_name))

Но вывод все равно записывается в исходный файл журнала, определенный в LOG_SETTINGS. Я ищу, чтобы иметь возможность сказать: logger2.replaceHandler(logfile), а не addHandler.

Есть ли способ сделать это?

4b9b3361

Ответ 1

сначала очистите обработчики журнала logger.handlers = [], затем добавьте другой обработчик.

logger2 = logging.getLogger('extensive')
logfile = logging.FileHandler("test.log")
logger2.handlers = []
logger2.addHandler(logfile)