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

如何自定义ResponseStatusExceptionResolver日志,仅屏蔽特定异常控制台日志?

解决Spring Boot指定异常不记录日志的问题

要实现只排除EntityNotFoundException的日志记录,同时保留AccessDeniedException等其他异常的日志,有两种可行方案:

方案一:自定义异常解析器

继承Spring的ResponseStatusExceptionResolver,重写日志记录逻辑,只对特定异常跳过日志:

  1. 创建自定义异常解析器类
import org.springframework.web.servlet.mvc.method.annotation.ResponseStatusExceptionResolver;
import javax.servlet.http.HttpServletRequest;
import com.yourproject.exception.EntityNotFoundException; // 替换为你的异常类实际路径
import org.springframework.security.access.AccessDeniedException;

public class SelectiveLogExceptionResolver extends ResponseStatusExceptionResolver {

    @Override
    protected void logException(Exception ex, HttpServletRequest request) {
        // 仅当异常不是EntityNotFoundException时,才调用父类的日志记录逻辑
        if (!(ex instanceof EntityNotFoundException)) {
            super.logException(ex, request);
        }
        // EntityNotFoundException会被跳过,不记录日志
    }
}
  1. 注册该解析器为Spring Bean
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class WebMvcConfig {

    @Bean
    public SelectiveLogExceptionResolver selectiveLogExceptionResolver() {
        return new SelectiveLogExceptionResolver();
    }
}

这种方式优势是逻辑灵活,能精确控制哪些异常需要日志,适合需要自定义更多规则的场景。

方案二:通过日志框架过滤(以Logback为例)

直接在日志配置中针对ResponseStatusExceptionResolver类过滤掉EntityNotFoundException的日志:

在logback.xml或logback-spring.xml中添加如下配置:

<logger name="org.springframework.web.servlet.mvc.method.annotation.ResponseStatusExceptionResolver" level="INFO">
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator>
            <!-- 替换为你实际的EntityNotFoundException全类名 -->
            <expression>return !(throwable instanceof com.yourproject.exception.EntityNotFoundException);</expression>
        </evaluator>
        <OnMismatch>DENY</OnMismatch>
        <OnMatch>ACCEPT</OnMatch>
    </filter>
</logger>

该方案无需修改业务代码,配置简单,适合仅需过滤特定异常日志的场景。

注意事项

  • 确保配置中异常类的全类名与实际项目一致,如果是Spring自带的异常(比如Spring Data的ResourceNotFoundException),要替换对应包路径。
  • 若使用Log4j2,可对应调整日志过滤规则,逻辑类似。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:21:10