为什么自定义 logging 过滤器无法打印指定等级日志信息?

ID:21169 / 打印

为什么自定义 logging 过滤器无法打印指定等级日志信息?

自定义 logging 过滤器无法打印指定等级日志信息的问题

给定以下 python 代码:

class customfilter(logging.filter):     def filter(self, record):         message = record.getmessage()         return 'custom' in message  customfilter = customfilter()  logger: logger = logging.getlogger() logger.setlevel(logging.debug) logger.addfilter(customfilter)  logger.debug('this is a debug message with custom keyword') logger.info('this is an info message with custom keyword') logger.warning('this is a warning message with custom keyword') logger.error('this is an error message with custom keyword') logger.critical('this is a critical message with custom keyword')

代码中使用了自定义日志过滤器 customfilter,意图只打印包含 'custom' 字符串的日志信息。然而,运行代码后,我们发现控制台只打印了警告、错误和严重错误级别的日志信息,而调试和信息级别的日志信息却不见踪影。

问题原因

问题不在于自定义过滤器本身,而在于代码的使用方式。在给定的代码中,我们没有为日志器添加处理程序(handler),因此日志信息没有地方输出。

正确的做法是先创建一个 handler,再将其添加到日志器中。常用的 handler 有 streamhandler,它将日志信息输出到控制台。

修改后的代码

import logging  # 创建一个流处理程序,将日志信息输出到控制台 handler = logging.StreamHandler()  # 创建一个自定义日志过滤器 class CustomFilter(logging.Filter):     def filter(self, record):         message = record.getMessage()         return 'custom' in message  # 创建一个日志器,并为其设置级别、添加过滤器和处理程序 logger = logging.getLogger(__file__) logger.setLevel(logging.DEBUG) logger.addFilter(CustomFilter()) logger.addHandler(handler)  # 记录不同等级的日志信息 logger.debug('This is a debug message with custom keyword') logger.info('This is an info message with custom keyword') logger.warning('This is a warning message with custom keyword') logger.error('This is an error message with custom keyword') logger.critical('This is a critical message with custom keyword')

修改后的代码将正确地打印包含 'custom' 字符串的调试和信息级别的日志信息。

上一篇: 如何在导入类后修改其行为?
下一篇: 如何使用 pytest 仅运行特定的测试文件?

作者:admin @ 24资源网   2025-01-14

本站所有软件、源码、文章均有网友提供,如有侵权联系308410122@qq.com

与本文相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。