Python中如何不修改全局日志级别单独设置graphviz日志等级
解决方案
你不需要依赖graphviz库自带的日志级别设置接口,直接使用Python标准库logging的按命名空间配置能力就可以实现,完全不需要修改全局日志级别。
graphviz库内部所有日志都是通过标准logging模块,以graphviz作为logger名称输出的,你只要单独获取这个logger实例设置目标级别即可,不会影响你应用自身和其他第三方库的日志配置。
最简实现代码
import logging import graphviz # 单独将graphviz库的日志级别设置为WARNING logging.getLogger("graphviz").setLevel(logging.WARNING) # 你自己的应用日志照常配置为DEBUG级别即可 logging.basicConfig(level=logging.DEBUG)
配置说明
logging.getLogger(name)是按名称获取logger单例的方法,无论你在导入graphviz之前还是之后调用,拿到的都是graphviz库实际使用的同一个logger实例,配置即时生效。- 该配置是持久生效的,不需要你在调用graphviz相关逻辑前后临时切换全局日志级别。
- 如果你使用
dictConfig/fileConfig做结构化日志配置,直接在loggers配置段添加针对graphviz的规则即可,示例:
import logging.config LOG_CONF = { "version": 1, "formatters": { "default": {"format": "%(asctime)s %(levelname)s %(name)s: %(message)s"} }, "handlers": { "console": {"class": "logging.StreamHandler", "formatter": "default"} }, "root": {"level": "DEBUG", "handlers": ["console"]}, "loggers": { # 单独配置graphviz的日志级别 "graphviz": {"level": "WARNING", "handlers": ["console"], "propagate": False} } } logging.config.dictConfig(LOG_CONF)
配置完成后,你应用自身的DEBUG级别日志可以正常输出,graphviz库输出的DEBUG、INFO级别日志会被过滤,仅保留WARNING及以上级别的日志。
这个方法对所有遵循Python标准logging规范、以自身模块名作为logger名称的第三方库都通用,你可以用同样的方式单独调整任意第三方库的日志级别。
内容的提问来源于stack exchange,提问作者Adi Shavit
相关产品推荐
相关产品推荐

