找出哪个模块正在设置根记录器

时间:2012-09-20 22:53:44

标签: python logging

我如何能够找到覆盖Python根记录器的模块?

我的Django项目从很多外部包中导入,我尝试搜索logging.basicConfig和logging.root设置的所有实例,但是大多数都在测试中,除非特别调用,否则不应该覆盖它。 / p>

Django的日志配置没有指定根记录器。

1 个答案:

答案 0 :(得分:4)

解决方案是对Python日志记录模块进行一些猴子修补。 我只是在logging.root.addHandler函数周围包装了一个装饰器,它打印了堆栈,我发现我的罪魁祸首是调用了logging.getLogger()。如果您在没有任何参数的情况下调用getLogger,则会获得根记录器。

import logging
import sys
import traceback
def tracer(func):
    def new_func(*args, **kwargs):
        try:
            traceback.print_stack(sys.stderr)
        except:
            traceback.print_exc(sys.stderr)
        return func(*args, **kwargs)
    return new_func
old_addHandler = logging.root.addHandler
logging.root.addHandler = tracer(old_addHandler)

# run your code