Использование файла конфигурации для входа в 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"