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

如何让Spring输出与预设级别不同的日志?

解决方案:调整CommonsRequestLoggingFilter的日志输出级别

方案一:自定义Filter子类(最直接)

CommonsRequestLoggingFilter的日志级别确实硬编码在logMessage方法里,但这个方法是protected的,直接子类重写就能解决问题,不用碰复杂的日志拦截逻辑:

import org.springframework.web.filter.CommonsRequestLoggingFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class InfoLevelRequestLoggingFilter extends CommonsRequestLoggingFilter {
    private static final Logger logger = LoggerFactory.getLogger(InfoLevelRequestLoggingFilter.class);

    @Override
    protected void logMessage(String message) {
        // 将原有的DEBUG级别输出改为INFO
        logger.info(message);
    }
}

接着在Spring配置里替换默认过滤器:

@Configuration
public class WebConfig {
    @Bean
    public CommonsRequestLoggingFilter requestLoggingFilter() {
        InfoLevelRequestLoggingFilter filter = new InfoLevelRequestLoggingFilter();
        // 保留你原本的请求日志配置,比如是否记录请求体、请求头等
        filter.setIncludeQueryString(true);
        filter.setIncludePayload(true);
        filter.setMaxPayloadLength(10000);
        filter.setIncludeHeaders(true);
        filter.setAfterMessagePrefix("REQUEST DATA : ");
        return filter;
    }
}

方案二:用日志框架拦截修改级别(适合不想改动Filter的场景)

如果不想自定义Filter,可以借助日志框架的扩展功能实现。以Logback为例,添加TurboFilter拦截指定Logger的DEBUG日志,强制转为INFO级别输出:

在logback.xml中添加配置:

<turboFilter class="ch.qos.logback.classic.turbo.MatchingFilter">
    <logger>org.springframework.web.filter.CommonsRequestLoggingFilter</logger>
    <level>DEBUG</level>
    <onMatch>ACCEPT_WITH_INFO</onMatch>
</turboFilter>

这个过滤器会匹配目标Logger的DEBUG日志,修改级别为INFO后再输出。

补充说明

不用纠结Spring硬编码的问题,上面两种方法都能快速实现需求:方案一更轻量,直接针对Filter本身调整;方案二是从全局日志层面修改,可根据你的实际场景选择。

内容的提问来源于stack exchange,提问作者peer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:05:10