使用根记录器禁用导入模块的日志
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
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