Python 更改导入模块的日志级别
假设您的代码使用的模块 将日志语句与模块中的Python 更改导入模块的日志级别,python,logging,Python,Logging,假设您的代码使用的模块 将日志语句与模块中的logging.info一起使用,而不是与记录器实例中的logger.info一起使用,并且您无法控制修改正在使用的模块 是否可以只为导入的模块定制日志记录级别,而不要求维护人员更改代码 这些问题描述了一种非常简单的方法来更改特定模块的日志记录级别。 下面的代码实现了所述的解决方案,只记录来自该模块的错误消息,但它没有按预期打开警告消息 当将noise_noise模块作为字符串文本引用并使用导入符号的名称时,测试模块生成相同的输出 运行_me.py
logging.info
一起使用,而不是与记录器实例中的logger.info
一起使用,并且您无法控制修改正在使用的模块
是否可以只为导入的模块定制日志记录级别,而不要求维护人员更改代码
这些问题描述了一种非常简单的方法来更改特定模块的日志记录级别。
下面的代码实现了所述的解决方案,只记录来自该模块的错误消息,但它没有按预期打开警告消息 当将noise_noise模块作为字符串文本引用并使用导入符号的名称时,测试模块生成相同的输出 运行_me.py以抑制警告消息缺少什么 噪音_noise.py 编辑:假设此模块表示从其他维护人员导入的模块,并关闭以进行修改 快跑
是的,如果您知道记录器的名称,则有可能 示例:将urllib3的日志级别更改为WARNING
logging.getLogger("urllib3").setLevel(logging.WARNING)
您应该使用
logger.warn
等,而不是logging.warn
来查看您正在尝试使用的特定记录器,谢谢您的提示。我看到,当目标模块使用logger而不是logging时,级别修改可以按预期工作。在本例中,noise_noise.py代表我正在导入但未编辑的模块。是否有任何选项可以禁止开发人员POV中的模块进行修改?我将更新问题以反映这一点。如果模块使用默认的记录器,而您无法控制它,那么我认为除非您知道它的名称,否则没有办法执行特定的记录器。如果您希望禁用所有现有的记录器,您可以使用类似于logging.config.dictConfig({'version':1,'disable_existing_logger':True,})
。也可以看看感谢您的回答@balderman。在这种情况下,执行日志记录的模块使用默认的记录器。在这种情况下,我认为您将无法控制日志级别。如果您可以控制其他模块代码,则最好使用命名记录器。
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
logging.getLogger("urllib3").setLevel(logging.WARNING)