关于python:延迟输出到日志文件

Delaying output to a logging file

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

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

有没有办法将一组日志语句推迟到稍后写入文件?该函数的简化版本如下:显然它不会运行,因为 logfile 直到以后才可用。

看起来 basicConfig(..., delay=True) 可能是答案,但听起来它只处理第一个日志记录事件的延迟。是否有更多日志记录事件的答案?

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

一旦 config['logfile'] 可用,调用 mylogger.changeLogfile() 并继续记录。