如何禁用导入GluonCV模块自带的logging.basicConfig 覆盖原有日志配置
覆盖第三方模块自带的logging配置的方法
问题原因:
logging.basicConfig的设计是仅当根日志记录器没有任何已绑定的处理器时才会生效,你导入的模块在你的日志配置执行前先调用了该方法,抢占了根日志器的配置权,导致你的自定义配置不生效。
方法一:调整导入顺序(最推荐)
只要把你自己的日志配置代码放在导入目标模块的代码之前即可,模块内的logging.basicConfig遇到已经配置过的根日志器会自动跳过,不会覆盖你的配置。
示例代码:
import logging # 第一步:先配置你的自定义日志 logging.basicConfig( level=logging.DEBUG, format="%(asctime)s | %(name)s | %(levelname)s | %(message)s", # 可添加其他自定义配置,比如输出到文件、添加过滤器等 ) # 第二步:再导入目标模块 from gluoncv.torch.data.gluoncv_motion_dataset.dataset import 你需要的类/方法
方法二:重置根日志器后重新配置
如果你的代码结构不允许调整导入顺序,可以先清空根日志器已经被模块添加的处理器,再重新执行你的自定义配置。
示例代码:
import logging # 先导入目标模块(允许模块先执行它自带的日志配置) from gluoncv.torch.data.gluoncv_motion_dataset.dataset import 你需要的类/方法 # 清空根日志器的所有已有处理器 for handler in logging.root.handlers[:]: logging.root.removeHandler(handler) # 重新执行你的自定义日志配置 logging.basicConfig( level=logging.DEBUG, format="%(asctime)s | %(name)s | %(levelname)s | %(message)s" )
方法三:单独限制目标模块的日志输出
如果你不需要修改全局日志配置,只是不想看到该模块输出的冗余INFO日志,可以单独获取该模块的日志记录器,自定义它的日志级别:
import logging # 导入目标模块 from gluoncv.torch.data.gluoncv_motion_dataset.dataset import 你需要的类/方法 # 获取该模块对应的日志记录器,单独设置日志级别 module_logger = logging.getLogger("gluoncv.torch.data.gluoncv_motion_dataset.dataset") module_logger.setLevel(logging.WARNING) # 仅输出警告及以上级别的日志,过滤INFO及以下内容
内容的提问来源于stack exchange,提问作者Austin
相关产品推荐
相关产品推荐

