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

2024-06-01 10:17:05 发布

您现在位置:Python中文网/ 问答频道 /正文

有时,我将多个处理程序连接到给定的记录器,但我只需要一个处理程序,因为日志显示为重复的行

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

LogRecord类有很多关于记录本身添加到何处的信息,但是在添加处理程序时是否有相同的信息


Tags: 模块代码信息处理程序记录记录器logrecord
1条回答
网友
1楼 · 发布于 2024-06-01 10:17:05

您可以monkeypatch ^{}方法,例如

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的位置

相关问题 更多 >