延迟输出到日志文件

3
我有一个函数,希望从中输出日志。日志文件是程序输出的一部分,记录函数执行何时执行了什么操作(即不仅仅是调试或事后分析),因此我想将它们存储在特定位置。该位置从配置文件中加载,但我想记录读取配置文件的成功或失败!
因此,在读取配置之前无法创建日志文件,但我不想在记录过程之前读取配置。
是否有一种方法可以推迟一组日志语句的写入,直到稍后?下面是该函数的简化版本:显然,它无法运行,因为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()

请务必仔细检查您的打字错误,这样更容易理解。delay就像懒加载,它会在第一次调用infowarnerror等函数时才进行写入。 - user1767754
1个回答

0

有多种选择,但以下是两个相对简单的选项:

选项1

开始记录到一个临时文件中。如果您能够解析配置文件,请复制临时文件内容并更改日志文件句柄。如果出现错误,请将临时文件转储到标准输出。

选项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() 并继续记录日志。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接