使用配置文件登录 python

Using config file for logging in 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')

你怎么看,我可以通过写入不同的日志文件来调用我的函数。 但我想使用配置文件。使用配置(来自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')

但是使用配置文件。你能给我什么建议?

您可以使用 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"