为什么Python的logging模块自定义Filter无法输出给定级别的日志信息?
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')
为什么上述代码不会在控制台打印出 debug 和 info 级别的日志信息?
只会输出:
This is a warning message with custom keywordThis is an error message with custom keyword
This is a critical message with custom keyword
回答:
不是filter的问题,是你使用的问题
python">import logginglogging.getLogger().setLevel(logging.DEBUG)
logging.debug("This is a debug message with custom keyword")
logging.info("This is an info message with custom keyword")
logging.warning("This is a warning message with custom keyword")
logging.error("This is an error message with custom keyword")
logging.critical("This is a critical message with custom keyword")
DEBUG:root:This is a debug message with custom keywordINFO:root:This is an info message with custom keyword
WARNING:root:This is a warning message with custom keyword
ERROR:root:This is an error message with custom keyword
CRITICAL:root:This is a critical message with custom keyword
原因
正确的使用方法是
import loggingclass CustomFilter(logging.Filter):
def filter(self, record):
message = record.getMessage()
return "custom" in message
logger: logging.Logger = logging.getLogger(__file__)
handler = logging.StreamHandler() # handler才是关键
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
customFilter = CustomFilter()
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")
回答:
使用了自定义的 filter,该 filter 只会对包含 "custom" 关键字的日志信息进行过滤,只有 warning 级别及以上的日志信息中包含 "custom" 关键字,所以只输出了 warning、error 和 critical 级别的日志信息。
要在控制台打印出 debug 和 info 的日志信息,可以移除自定义的 filter 或者修改 filter 过滤条件,例如将 return 'custom' in message 修改为 return true(返回true),从而让所有日志信息都符合该 filter,即:不进行任何过滤。
以上是 为什么Python的logging模块自定义Filter无法输出给定级别的日志信息? 的全部内容, 来源链接: utcz.com/p/938860.html