更改导入模块的日志级别

Val*_*l H 6 python logging

假设您的代码正在使用一个模块,该模块使用logging.info来自模块的日志语句,而不是logger.info来自记录器实例,并且您无法控制修改正在使用的模块。

是否可以在不要求维护人员更改代码的情况下为导入的模块自定义日志记录级别?

这些问题描述了一种非常简单的方法来更改特定模块的日志记录级别。
如何禁用请求库中的日志消息?
Python 日志记录 - 禁用导入模块的日志记录

下面的代码按照描述实现了该解决方案,仅记录来自该模块的 ERROR 消息,但它没有按预期转换 WARNING 消息。

当将noise_noise 模块作为字符串文字引用并使用导入符号的名称时,测试模块会产生相同的输出。

run_me.py 缺少什么来抑制 WARN 消息?

嘈杂的噪音.py

编辑:假设此模块代表从其他维护者导入并关闭以进行修改的模块

import logging

def log_things():
    logging.warn('WARNING')
    logging.info('INFORMATION')
    logging.error('DANGER')
Run Code Online (Sandbox Code Playgroud)

运行_me.py

import logging
import noisy_noise
import sys

def main(args):
    logging.getLogger(noisy_noise.__name__).setLevel(logging.ERROR)
#    logging.getLogger('noisy_noise').setLevel(logging.ERROR)

    noisy_noise.log_things()

if __name__ == '__main__':
   sys.exit(main(sys.argv[1:]))
Run Code Online (Sandbox Code Playgroud)
$ python run_me.py
WARNING:root:WARNING
ERROR:root:DANGER
Run Code Online (Sandbox Code Playgroud)

bal*_*man 8

是的,如果您知道记录器的名称,这是可能的。

示例:将urllib3的日志级别更改为WARNING

logging.getLogger("urllib3").setLevel(logging.WARNING)
Run Code Online (Sandbox Code Playgroud)