SpringBoot定义全局异常类并打印错误堆栈信息

SpringBoot中可以定义全局异常类,不用在每一个接口使用try catch捕获返回异常

一、注解含义

@ControllerAdvice 这是一个增强的 Controller。使用这个 Controller ,可以实现三个方面的功能:

@ExceptionHandler指定捕获的异常类型,执行指定方法

二、定义全局异常类

@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    @ResponseBody
    @ExceptionHandler(Exception.class)
    public DataResult defaultGlobalException(HttpServletRequest request, Exception e) {
        log(request, e);
        return DataResult.failure("系统异常");
    }

    public void log(HttpServletRequest request, Exception exception) {
        //换行符
        String lineSeparatorStr = System.getProperty("line.separator");

        StringBuilder exStr = new StringBuilder();
        StackTraceElement[] trace = exception.getStackTrace();
//        获取堆栈信息并输出为打印的形式
        for (StackTraceElement s : trace) {
            exStr.append("\tat " + s + "\r\n");
        }
        //打印error级别的堆栈日志
        log.error("访问地址:" + request.getRequestURL() + ",请求方法:" + request.getMethod() +
                ",远程地址:" + request.getRemoteAddr() + lineSeparatorStr +
                "错误堆栈信息如下:" + exception.toString() + lineSeparatorStr + exStr);
    }
}
posted @ 2022-04-02 11:15  无情歌神  阅读(1642)  评论(0)    收藏  举报