Python日志记录是否会在使用removeHandler删除处理程序时通知处理程序?
我正在对FileHandler进行子类化,以编写一个生成正确xml文件的处理程序(这意味着,程序运行时不生成正确的xml文件,只在完成后生成正确的xml文件) 我所做的是:Python日志记录是否会在使用removeHandler删除处理程序时通知处理程序?,python,logging,Python,Logging,我正在对FileHandler进行子类化,以编写一个生成正确xml文件的处理程序(这意味着,程序运行时不生成正确的xml文件,只在完成后生成正确的xml文件) 我所做的是: 创建文件 写一个序言(一个元素开头) 每个日志记录在xml中产生一个元素 停止记录意味着将元素写得更近 如果Logger.removeHandler在被删除的处理程序中调用一些特殊回调,那就太好了,但是我找不到任何回调。可能它不在那里…处理程序在从记录器中添加或删除时不会得到通知。记录器使用处理程序,但处理程序对记录器一
- 创建文件
- 写一个序言(一个
元素开头) - 每个日志记录在xml中产生一个
元素 - 停止记录意味着将
元素写得更近
如果Logger.removeHandler在被删除的处理程序中调用一些特殊回调,那就太好了,但是我找不到任何回调。可能它不在那里…处理程序在从记录器中添加或删除时不会得到通知。记录器使用处理程序,但处理程序对记录器一无所知 但是,处理程序有一个
close()
方法,该方法在程序退出时由logging.shutdown()
(注册为atexit
)调用,因此您可以在那里添加逻辑。请记住调用基本实现的close()
,以确保正确的内务管理:
class MyHandler(logging.Handler):
def close(self):
# Write XML epilog.
# ...
super(MyHandler, self).close()
我已经重写了
close()
,但不知道它已经是基类的一部分。你在哪里找到这些信息的?我很好奇,如果我手动调用logging.shutdown()
,会发生什么…@mariotomo:我发现它是我学习最多的方式——通过阅读源代码@马里奥托莫:你也可以阅读文档!对于Handler.close()
:;对于shutdown()
: