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

Spring Boot中是否可全局捕获Error而非Exception用于日志记录?

Spring Boot 用@ControllerAdvice捕获Controller层Error的实现方案

可行性结论

需求完全可行。Spring MVC提供的@ExceptionHandler注解原生支持处理所有Throwable类型的子类,既可以处理Exception,也可以处理Error类型的异常,无需为每个接口方法单独添加try...catch块。

最优实现方案

你可以直接在现有CoreExceptionHandler类的基础上调整,根据业务需求选以下两种方案即可:

方案1:分开处理Exception和Error

适合需要对两类异常做不同逻辑处理的场景:

import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice
@Component
@Order(value = Ordered.HIGHEST_PRECEDENCE)
public class CoreExceptionHandler {

    @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler(Exception.class)
    public void handleException(Exception ex) {
        // 原有Exception日志记录逻辑
    }

    @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler(Error.class)
    public void handleError(Error error) {
        // 新增Error日志记录逻辑,比如栈溢出、OOM等严重错误
    }
}

方案2:统一处理所有Throwable

适合不需要区分异常类型,统一做日志记录的场景:

import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice
@Component
@Order(value = Ordered.HIGHEST_PRECEDENCE)
public class CoreExceptionHandler {

    @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler(Throwable.class)
    public void handleAllThrowable(Throwable throwable) {
        // 统一记录所有Exception、Error类型的异常日志
    }
}

注意事项

  • 如果你的Controller都是Rest接口,建议把类上的@ControllerAdvice替换为@RestControllerAdvice,无需额外配置即可返回标准JSON响应。
  • 捕获Error后不要做过多复杂业务操作,尤其是OOM这类严重错误,优先保证日志可以正常写入即可,避免加重系统负载。
  • 该配置默认对所有Spring管理的Controller生效,如果你需要限定生效范围,可以给@ControllerAdvice指定basePackages等参数做范围过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:36:04