我在清理方法中写了这段代码
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()方法;只有处理者才能这样做。
有没有办法通知日志框架接下来会发生什么不好的事情,并且应该在继续之前刷新处理程序?
答案 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