Kivy Logger配置问题:无法过滤标准Python logging模块日志
问题描述
在配置日志记录器时遇到问题:应用依赖标准Python logging库,但无法通过Kivy的Logger对象过滤不同日志级别或模块的日志。相关代码如下:
import logging from kivy.logger import Logger, LOG_LEVELS if __name__ == '__main__': Logger.setLevel(LOG_LEVELS["info"]) logger = logging.getLogger('poopoo') Logger.addFilter(logging.Filter('poopoo')) for i in range(5): Logger.debug('kivy') logger.debug('pylogger')
现象:Logger.debug('kivy')的输出被成功过滤,但logger.debug('pylogger')的输出未被过滤。尝试设置Kivy日志模式为MIXED或PYTHON后问题仍存在。
问题原因
- Kivy的
Logger与Python标准logging库是两个独立的日志实例体系:给Kivy Logger添加的过滤器仅对Kivy Logger自身生成的日志生效,无法作用于标准logging创建的logger对象。 - 通过
logging.getLogger('poopoo')创建的日志实例属于标准logging体系,它的日志输出规则(级别过滤、内容过滤)由标准logging的配置控制,和Kivy Logger的设置无关联。 - 即使将Kivy日志模式设为MIXED或PYTHON,也只是让Kivy自身的日志输出转向标准
logging体系,并不会让标准logging的日志自动遵循Kivy Logger的过滤规则。
解决方法
若需过滤标准logging中poopoo模块的日志,需直接对标准logging体系进行配置:
- 设置日志级别:给
poopoologger设置级别,低于该级别的日志会被过滤:
logger.setLevel(logging.INFO)
- 添加过滤器:给标准
logging的处理器添加过滤器,过滤指定模块的日志:
# 遍历标准logging的所有根处理器并添加过滤器 for handler in logging.getLogger().handlers: handler.addFilter(logging.Filter('poopoo'))
内容的提问来源于stack exchange,提问作者frimann
相关产品推荐
相关产品推荐

