Python如何通过Logger名称正则匹配批量设置第三方库日志级别?
批量设置非自有Python日志Logger级别
直接通过遍历logging模块维护的已创建Logger字典,配合正则匹配就能批量完成需求,代码示例如下:
import re import logging # 匹配规则:排除所有以foo.开头的自有Logger non_foo_pattern = re.compile(r'^(?!foo\.)') # 遍历所有已初始化的Logger for logger_name, logger in logging.Logger.manager.loggerDict.items(): # 仅处理真正的Logger实例(跳过占位用的PlaceHolder对象) if isinstance(logger, logging.Logger): if non_foo_pattern.match(logger_name): logger.setLevel(logging.WARNING)
关键细节说明
logging.Logger.manager.loggerDict:Python的logging模块会把所有已创建的Logger对象存在这个字典里,键是Logger的名称,值可能是Logger实例或者占位用的PlaceHolder对象- 正则
^(?!foo\.):用负向预查排除所有以foo.开头的自有Logger(比如foo.A、foo.B),只匹配第三方库的Logger名称 - 类型判断:必须先确认是
logging.Logger实例再设置级别,否则会因为操作PlaceHolder对象报错
注意事项
- 这段代码要在第三方库的Logger被创建之后执行,比如放在你导入所有第三方库、初始化完自有日志之后,不然那些还没被初始化的第三方Logger不会出现在字典里
- 如果需要更严格的匹配(比如避免误判
foobar这类名称),可以把正则改成^(?!foo),不过通常第三方库不会用和你自有包同名前缀的Logger
内容的提问来源于stack exchange,提问作者lazcuenqui
相关产品推荐
相关产品推荐

