我有一个要输出的函数。日志文件是程序输出的一部分,作为功能何时执行操作的记录(即调试或发布mortem的东西),因此我想将它们存储在特定位置。该位置是从配置文件加载的,但是我想在读取配置文件时记录成功或失败!
因此,直到阅读config才能创建日志文件,但是我不想读取配置,直到我可以记录该过程。
是否有一种方法可以将一组日志语句推迟到以后写入文件?该函数的简化版本如下:显然它不会运行,因为logfile
直到以后才可用。
看来basicConfig(..., delay=True)
可能是答案,但听起来这只是处理第一个记录事件的延迟。有更多记录事件的答案吗?
import logging
import json
def record(config):
logger = logging.getLogger(LOG)
logging.basicConfig(filename=logfile, level=logging.INFO)
logger.info('Start of continuous sampling')
# Load the config file
try:
config = json.load(open(config_file))
logfile = config['logfile']
logger.info('Config file found')
except IOError:
logger.critical('Config file not found')
sys.exit()
有多个选项,但这里有两个相当简单的选项:
选项1
开始登录临时文件。如果您能够解析配置文件,请复制临时文件内容并更改记录文件句柄。如果有错误,请将临时文件转到stdout。
选项2
创建一个包装类别类,只要不可用,就可以延迟呼叫对记录器。
的线class MyLogger(object):
def __init__(self, ...)
self.logger = ... # temp file
def info(self, msg):
self.logger.info(msg)
def changeLogfile(self, f):
self.logger = ... # now writing to f
可用config['logfile']
后,致电mylogger.changeLogfile()
并继续记录。