如何通知python日志处理程序可能发生崩溃并刷新日志?

时间:2014-01-07 18:44:02

标签: python logging error-handling

我在清理方法中写了这段代码

    for (key, target) in self.targets.items():
        try:
            logger.info('releasing %s: %s', key, target)
            target.dispose()   # Something bad can occur here
        except:
            logger.exception('uh oh, something has gone wrong')

我遇到的问题是,在target.dispose()调用中,可能会发生一些不好的事情,并且可能导致解释器崩溃。 (目标对象调用C和/或C#中的东西)我想先调用日志,然后调用target.dispose(),但python loggers没有flush()方法;只有处理者才能​​这样做。

有没有办法通知日志框架接下来会发生什么不好的事情,并且应该在继续之前刷新处理程序?

1 个答案:

答案 0 :(得分:1)

查看logging/__init__.py中的实现,这似乎是迭代记录器的所有处理程序的正确方法:

def flush_logger(logger):
    c = logger
    while c:
        for hdlr in c.handlers:
            try:
                hdlr.flush()
            except AttributeError:
                pass
        if not c.propagate:
            c = None    #break out
        else:
            c = c.parent