我如何能够找到覆盖Python根记录器的模块?
我的Django项目从很多外部包中导入,我尝试搜索logging.basicConfig和logging.root设置的所有实例,但是大多数都在测试中,除非特别调用,否则不应该覆盖它。 / p>
Django的日志配置没有指定根记录器。
答案 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