Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.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

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日志:如何确定何时添加了处理程序?_Python_Logging - Fatal编程技术网

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

Python日志:如何确定何时添加了处理程序?,python,logging,Python,Logging,有时,我将多个处理程序连接到给定的记录器,但我只需要一个处理程序,因为日志显示为重复的行 我想知道什么代码或模块实际添加了处理程序,以便打开/关闭它们 LogRecord类有很多关于记录本身添加到何处的信息,但是否有添加处理程序的等效信息?您可以monkeypatch该方法,例如 def monkeypatch_logging(): import logging add_handler_orig = logging.Logger.addHandler def _addH

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

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

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

您可以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
文件“spam.py”,第18行,在
logging.basicConfig(级别=logging.INFO)
basicConfig中的第1823行文件“/usr/lib64/python3.6/logging/_init__.py”
root.addHandler(h)
文件“spam.py”,第10行,在_addHandler中
traceback.print_stack()
信息:root:helloworld
stacktraces将显示调用
Logger.addHandler
的位置