如何在Sanic框架中忽略空日志消息?
解决Sanic空日志条目问题
你的空日志来自Sanic内部access_logger.info("")的调用,要忽略这些空日志,可以通过添加日志过滤器实现,修改你的initialize_logger代码如下:
def initialize_logger(): class EmptyMessageFilter(logging.Filter): def filter(self, record): # 过滤掉空字符串或仅含空白字符的日志消息 return bool(record.msg.strip()) class StreamLogFormatter(logging.Formatter): format_type = "[%(asctime)s] [%(levelname)s] %(message)s" def format(self, record): formatter = logging.Formatter(self.format_type) return formatter.format(record) logger = logging.getLogger() # 移除默认处理器 logger.handlers = [] # 控制台日志处理器 console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO) console_handler.setFormatter(StreamLogFormatter()) # 添加空消息过滤器 console_handler.addFilter(EmptyMessageFilter()) logger.addHandler(console_handler) logger.setLevel(logging.INFO) # 额外:针对Sanic的access logger单独添加过滤器(确保彻底生效) sanic_access_logger = logging.getLogger("sanic.access") sanic_access_logger.addFilter(EmptyMessageFilter()) return logger
说明:
EmptyMessageFilter类会检查每条日志的消息内容,如果是空字符串或仅含空白字符,就会过滤掉这条日志,不会输出到控制台;- 同时给Sanic的
sanic.access日志器添加过滤器,因为空日志是由它发出的,确保过滤规则覆盖到这个特定日志器; - 移除了原代码中的
trace(record.msg)(如果是调试用代码可以保留,不影响过滤逻辑)。
这样修改后,那些[INFO]后面空着的日志条目就会被过滤掉,不会再出现在输出中。
内容的提问来源于stack exchange,提问作者Redwings
相关产品推荐
相关产品推荐

