将输出延迟到记录文件



我有一个要输出的函数。日志文件是程序输出的一部分,作为功能何时执行操作的记录(即调试或发布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()并继续记录。

最新更新