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



有时我在给定的记录器上附上多个处理程序,但是我只想要一个,因为原木显示为重复线。

我想知道实际添加了哪个代码或模块,以便我可以打开/关闭它们。

logrecord类具有有关添加记录本身的位置的大量信息,但是添加处理程序时是否有等效的信息?

您可以monkeypatch 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

stackTraces将向您显示Logger.addHandler的位置。

最新更新