使用根记录器禁用导入模块的日志

Disable logs from imported module using the root logger

Microsoft 的 presidio-analyzer modules 根记录器之一:

        logging.info(
            "Returning a total of %d recognizers (predefined + custom)", len(to_return)
        )

这一行将被写入数百万次。

我在 GitHub 上创建了一个 issue,但与此同时,有没有办法禁止这些日志?我无法按名称访问记录器,也无法将根记录器设置为 WARN,因为它会传播到我所有的记录器。

修补该特定模块中日志记录的导入,如下所示:

import microsoft_module

microsoft_module.logging = my_fake_logging

然后您可以将具有所需级别的所有调用代理到实际的 ligging 模块。

注意不要直接修补 microsoft_module.logging.info,因为它会影响所有日志记录,因为它使用的是同一个模块。

更新: 我试图稍微弄乱这个概念,这就是我想出的:

您可以在特定函数中修补全局变量,这样您就可以在该特定范围内更改日志记录!

x = 5

def g():
    print(x)

g() 

print(g.__globals__)
g.__globals__['x'] = 9

g()

输出:

5
{'__name__': '__main__', '__file__': '/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py', '__builtins__': <module 'builtins' (built-in)>, '__warningregistry__': {'version': 0}, 'x': 5, 'g': <function g at 0x755125edc0>}
9