Python日志记录:如何确定何时添加处理程序?

时间:2019-04-30 18:14:41

标签: python logging

有时我给给定的记录器附加了多个处理程序,但是我只想要一个处理程序,因为日志显示为重复的行。

我想知道实际上是什么代码或模块添加了处理程序,以便可以打开/关闭它们。

LogRecord类具有很多有关记录本身添加位置的信息,但是是否有关于何时添加处理程序的等效信息?

1 个答案:

答案 0 :(得分:2)

例如,您可以猴子修补Logger.addHandler方法

def monkeypatch_logging():
    import logging
    add_handler_orig = logging.Logger.addHandler

    def _addHandler(self, hdlr):
        import traceback
        traceback.print_stack()
        add_handler_orig(self, hdlr)

    logging.Logger.addHandler = _addHandler

将代码放在入口点附近,这样它就可以尽早运行,例如

if __name__ == '__main__':
    import logging
    monkeypatch_logging()
    logging.basicConfig(level=logging.INFO)
    logging.info('hello world')

将输出:

  File "spam.py", line 18, in <module>
    logging.basicConfig(level=logging.INFO)
  File "/usr/lib64/python3.6/logging/__init__.py", line 1823, in basicConfig
    root.addHandler(h)
  File "spam.py", line 10, in _addHandler
    traceback.print_stack()
INFO:root:hello world

堆栈跟踪将向您显示在何处调用Logger.addHandler