Delaying output to a logging file
我有一个想要输出日志的函数。日志文件是程序输出的一部分,作为函数何时执行的记录(即不仅仅是调试或事后处理),所以我想将它们存储在特定位置。该位置是从配置文件加载的,但我想记录读取配置文件的成功或失败!
所以在读取配置之前我无法创建日志文件,但我不想在可以记录进程之前读取配置。
有没有办法将一组日志语句推迟到稍后写入文件?该函数的简化版本如下:显然它不会运行,因为
看起来
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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
开始登录临时文件。如果您能够解析配置文件,请复制临时文件内容并更改日志文件句柄。如果有错误,将临时文件转储到标准输出。
选项2
创建一个package类,只要配置文件不可用,它就会延迟对记录器的调用。类似于
的东西
1 2 3 4 5 6 7 8 9 | 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 |
一旦