使用配置文件登录 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"
我写了登录函数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"