当使用removeHandler删除处理程序时,Python日志记录会通知处理程序吗?

时间:2011-11-15 11:38:20

标签: python logging

我正在继承FileHandler来编写一个生成正确xml文件的处理程序(意思是,只有在程序正在运行时,才会完成)。

我所做的是:

  • 创建文件
  • 写一个序言(一个<Diag>元素开头),
  • 每个日志记录都会导致xml
  • 中的<line />元素
  • 停止记录意味着将</Diag>元素写得更近。

如果Logger.removeHandler会在被删除的处理程序中调用一些特殊的回调,那将是很好的,但我找不到任何回调。也许它不存在......

1 个答案:

答案 0 :(得分:2)

处理程序在记录器中添加或删除时会被 通知。记录器使用处理程序,但处理程序对记录器一无所知。

但是,处理程序具有close()方法,该方法在程序退出时由logging.shutdown()(在atexit注册)调用,因此您可以在那里添加逻辑。只需记住调用基本实现的close()以确保正确的内务管理:

class MyHandler(logging.Handler):

    def close(self):
       # Write XML epilog.
       # ...
       super(MyHandler, self).close()