Использование файла конфигурации для входа в Python

Я написал функцию для входа в Python:

def go_logger(name_of_file):
    formatter = logging.Formatter('%(asctime)s - %(message)s')
    logging.basicConfig(filemode='a', datefmt='%m-%d-%Y')
    logger = logging.getLogger(name_of_file)
    logger.setLevel(logging.DEBUG)
    handler = closehandler.ClosingHandler(os.path.join('/path/to/logs', filename), mode='a')
    handler.setLevel(logging.DEBUG)
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    return logger

И это работает. Я могу вызвать эту функцию, например так:

LOG = host_utils.go_logger('wwe.log')

Как вы можете видеть, я могу вызвать мою функцию с записью в разные файлы журнала. Но я хочу использовать конфигурационный файл. Используя config (из официальной документации python):

logging.config.fileConfig(fname, defaults=None, disable_existing_loggers=True)

В порядке, fname это имя конфигурации, но как я могу использовать заполнитель для имени файла для журнала?

Часть записи в файл из конфигурации:

[handler_handler] 
class=handlers.FileHandler 
level=DEBUG
formatter=Formatter
args=('wwe.log','a')

Ты видишь, args=('wwe.log','a'), Как я могу поставить заполнитель вместо имени журнала файла? Я повторяю, я хочу вызвать функцию, как я сделал с помощью моего метода:

LOG = host_utils.go_logger('wwe.log')

Но с использованием файла конфигурации. Что вы можете посоветовать мне?

1 ответ

Решение

Вы можете использовать ключи defaults словарь в качестве заполнителей в файле конфигурации.

Поскольку в вашем другом вопросе используются заполнители, я предполагаю, что вы поняли это, но вот полный, работающий пример из вашего другого вопроса, на случай, если у других возникнет такая же проблема:

import logging.config


def get_logger(logfilename):
    config_file = ('config.txt')
    logging.config.fileConfig(config_file, defaults={'logfilename': logfilename}, disable_existing_loggers=False)
    logger = logging.getLogger("main")
    return logger

logger = get_logger('scratch.log')
logger.info('Hello, World!')

Вот файл конфигурации с logfilename местодержатель:

[loggers]
keys=root

[handlers]
keys=fileHandler

[formatters]
keys=Formatter

[logger_root]
level=DEBUG
handlers=fileHandler
qualname=main

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=Formatter
args=('%(logfilename)s', 'a', 'utf8')

[formatter_Formatter]
format=%(asctime)s - %(levelname)s - %(message)s
datefmt="%Y-%m-%d %H:%M:%S"
Другие вопросы по тегам