当前位置: 首页 > 知识库问答 >
问题:

更改导入模块的日志级别

华浩壤
2023-03-14

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

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

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

下面的代码实现了所述的解决方案,只记录来自该模块的错误消息,但它没有按预期打开警告消息。

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

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

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

import logging

def log_things():
    logging.warn('WARNING')
    logging.info('INFORMATION')
    logging.error('DANGER')
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个答案

艾宁
2023-03-14

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

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

logging.getLogger("urllib3").setLevel(logging.WARNING)
 类似资料:
  • 我正在使用Python日志模块,并希望禁用由我导入的第三方模块打印的日志消息。例如,我使用的是如下所示: 当我执行logger.debug时,它会输出我的调试消息(“my Message!”),但它也会从我导入的任何模块中输出调试消息(如请求和许多其他东西)。 我只想看到我感兴趣的模块的日志消息。有没有可能让日志模块做到这一点?

  • 我目前正在尝试降低我在java项目中使用的PDFBox 1.8.6库的日志记录级别,但失败了。基于前面的问题,我在 /src/目录中有以下log4j.properties文件。 我不确定我还遗漏了什么,因为我仍然在控制台中收到类似以下消息的垃圾邮件。 如果有一种方法可以通过编程方式更改日志级别,那么我根本不会附加到属性文件,因为我在其他任何地方都不使用log4j。我不知道它是否使用log4j。属性

  • 问题内容: 这是我的包裹层次结构 现在我要导入里面。所以我给了 app1.py。 但是我收到以下错误: 我还应该提到我是从server.py导入app1.py的。是我实际上正在运行的文件。当server.py导入app1.py时,尝试导入时出现上述错误 我在这里做错了什么? 问题答案: 如果您以脚本运行,则不会将的父目录添加到中。该目录本身,而不是被添加(而不是作为一个包,但作为进口搜索路径)。

  • 给定的第三方库的源代码我不能更改: 我想消除假阳性。 感谢您的反馈!

  • 我一直在尝试更改用户日志的日志级别,即出现在

  • 问题 你想给某个已存在模块中的函数添加装饰器。 不过,前提是这个模块已经被导入并且被使用过。 解决方案 这里问题的本质就是你想在模块被加载时执行某个动作。 可能是你想在一个模块被加载时触发某个回调函数来通知你。 这个问题可以使用10.11小节中同样的导入钩子机制来实现。下面是一个可能的方案: # postimport.py import importlib import sys from coll