Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python日志记录是否会在使用removeHandler删除处理程序时通知处理程序?_Python_Logging - Fatal编程技术网

Python日志记录是否会在使用removeHandler删除处理程序时通知处理程序?

Python日志记录是否会在使用removeHandler删除处理程序时通知处理程序?,python,logging,Python,Logging,我正在对FileHandler进行子类化,以编写一个生成正确xml文件的处理程序(这意味着,程序运行时不生成正确的xml文件,只在完成后生成正确的xml文件) 我所做的是: 创建文件 写一个序言(一个元素开头) 每个日志记录在xml中产生一个元素 停止记录意味着将元素写得更近 如果Logger.removeHandler在被删除的处理程序中调用一些特殊回调,那就太好了,但是我找不到任何回调。可能它不在那里…处理程序在从记录器中添加或删除时不会得到通知。记录器使用处理程序,但处理程序对记录器一

我正在对FileHandler进行子类化,以编写一个生成正确xml文件的处理程序(这意味着,程序运行时不生成正确的xml文件,只在完成后生成正确的xml文件)

我所做的是:

  • 创建文件
  • 写一个序言(一个
    元素开头)
  • 每个日志记录在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()