更改导入的python模块的日志级别

时间:2019-06-26 15:15:53

标签: python

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

是否可以为导入的模块自定义日志记录级别,而无需向维护者请求更改代码?

这些问题描述了一种非常简单的方法,用于更改特定模块的日志记录级别。
How do I disable log messages from the Requests library?
Python Logging - Disable logging from imported modules

下面的代码实现了如上所述的解决方案,以仅记录来自该模块的ERROR消息,但未按预期方式打开WARNING消息。

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

run_me.py禁止显示WARN消息时缺少什么?

noisy_noise.py

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

import logging

def log_things():
    logging.warn('WARNING')
    logging.info('INFORMATION')
    logging.error('DANGER')

run_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:]))
$ python run_me.py
WARNING:root:WARNING
ERROR:root:DANGER

1 个答案:

答案 0 :(得分:0)

是的,如果您知道记录仪的名称,则是可能的。

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

logging.getLogger("urllib3").setLevel(logging.WARNING)