将输出延迟到日志文件

时间:2017-12-11 17:36:52

标签: python logging

我有一个我想输出日志记录的功能。日志文件是程序输出的一部分,作为函数何时执行的操作(即不仅仅是调试或死后事件)的记录,因此我想将它们存储在特定位置。该位置是从配置文件加载的,但我想在读取配置文件时记录成功或失败!

所以我无法在阅读配置之后创建日志文件,但在我可以记录该过程之前我不想阅读配置。

有没有办法将一组日志语句推迟到以后写入文件?该功能的简化版本如下:显然它不会运行,因为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 个答案:

答案 0 :(得分:0)

有多种选择,但这里有两个相当简单的选项:

选项1

开始登录临时文件。如果您能够解析配置文件,请复制临时文件内容和change the logging file handle。如果出现错误,请将临时文件转储到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()并继续记录。