You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:52:55