Springboot统一异常处理并保存到数据库

/**
     * 所有异常报错
     * @param
     * @return
     * @throws Exception
     */
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public Result allExceptionHandler(HttpServletRequest request,
                                      Exception ex) {
        String path = request.getServletPath();
        ErrorLogsUtil.error(ex,path);
        log.error("Exception:"+ ex.getMessage());
        return ResultUtils.error("操作失败");
    }

将异常 和 请求的路径作为参数传递

目前这里的数据库连接是写死的

package cn.com.connext.authority.utils;
import cn.com.connext.authority.config.DruidProperties;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class ErrorLogsUtil {
    /**
     * @param: [e]
     * @return  void
     * @Description  打印错误日志并保存到数据库
     */
    public static void error(Exception e,String path) {
        StackTraceElement stackTraceElement= e.getStackTrace()[0];
        Connection con = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/demo-boot?useSSL=false&characterEncoding=utf8", "root", "root");
        } catch (SQLException e1) {
            e1.printStackTrace();
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        }
        PreparedStatement ps = null;
        String sql = "INSERT INTO error_logs VALUES (UUID(), NOW(), ?,?)";
        try {
            ps = con.prepareStatement(sql);
            //打印日志,错在第几行
            String errorInfo = e.toString()+",errorMassage:"+stackTraceElement+","+"errorLine:"+stackTraceElement.getLineNumber();
            ps.setString(1, errorInfo);
            ps.setString(2,path);
            ps.execute();
        } catch (SQLException e1) {
            e1.printStackTrace();
        } finally {
            try {
                if(ps != null) {
                    ps.close();
                }
                if(con != null) {
                    con.close();
                }
            } catch (SQLException e1) {
                e1.printStackTrace();
            }

        }
    }

}

SQL

DROP TABLE IF EXISTS `error_logs`;

CREATE TABLE `error_logs` (
  `id` varchar(36) NOT NULL,
  `create_time` datetime DEFAULT NULL,
  `msg` varchar(500) DEFAULT NULL,
  `path` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

数据库配置用public static 会报错

原文地址:https://www.cnblogs.com/lyon91/p/10395334.html

时间: 2024-11-08 12:41:11

Springboot统一异常处理并保存到数据库的相关文章

spring 或 springboot统一异常处理

spring 或 springboot统一异常处理https://blog.csdn.net/xzmeasy/article/details/76150370 一,本文介绍spring MVC的自定义异常处理,即在Controller中抛出自定义的异常时,客户端收到更友好的JSON格式的提示.而不是常见的报错页面. 二,场景描述:实现公用API,验证API key的逻辑,放在拦截器中判断(等同于在Controller中)并抛出异常,用户收到类似下图的提示: 其中,Http状态Code也能自由控制

springboot统一异常处理

快看小说网 我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来展示异常内容.我怎么这么有钱 选择一个之前实现过的Web应用(Chapter3-1-2)为基础,启动该应用,访问一个不存在的URL,或是修改处理内容,直接抛出异常,如:   1 2 3 4   @RequestMapping("/hello") public String he

springboot 统一异常处理

在sping框架里定义我们想要的异常类,不能继承Exception,要继承RuntimeException,原因在于spring框架只对抛出的异常是RuntimeException,才会进行事务回滚,如果抛出的异常是Exception,是不会事务回滚的.比如以下写法: 在业务层中的用法: 枚举的定义: 捕获异常的类:

springboot + shiro 权限注解、请求乱码解决、统一异常处理

springboot + shiro 权限注解.请求乱码解决.统一异常处理 前篇 后台权限管理系统 相关: spring boot + mybatis + layui + shiro后台权限管理系统 springboot + shiro之登录人数限制.登录判断重定向.session时间设置 springboot + shiro 动态更新用户信息 基于前篇,新增功能: 新增shiro权限注解: 请求乱码问题解决: 统一异常处理. 源码已集成到项目中: github源码: https://githu

spring-boot实战【07】【转】:Spring Boot中Web应用的统一异常处理

我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来展示异常内容. 选择一个之前实现过的Web应用(Chapter3-1-2)为基础,启动该应用,访问一个不存在的URL,或是修改处理内容,直接抛出异常,如: 1 2 3 4 @RequestMapping("/hello") public String hello() throws Exce

springboot aop + logback + 统一异常处理 打印日志

1.src/resources路径下新建logback.xml 控制台彩色日志打印 info日志和异常日志分不同文件存储 每天自动生成日志 结合myibatis方便日志打印(debug模式) <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 可以在LogBack 的配置中使用相对路径--> &

Spring Boot2从入门到实战:统一异常处理

都说管理的精髓就是“制度管人,流程管事”.而所谓流程,就是对一些日常工作环节.方式方法.次序等进行标准化.规范化.且不论精不精髓,在技术团队中,对一些通用场景,统一规范是必要的,只有步调一致,才能高效向前.如前后端交互协议,如本文探讨的异常处理. 1. Spring Mvc中的异常处理 在spring mvc中,跟异常处理的相关类大致如下 上图中,spring mvc中处理异常的类(包括在请求映射时与请求处理过程中抛出的异常),都是 HandlerExceptionResolver 接口的实现,

使用Spring MVC统一异常处理实战

1 描写叙述 在J2EE项目的开发中.无论是对底层的数据库操作过程.还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常须要处理.每一个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一.维护的工作量也非常大. 那么,能不能将全部类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的. 以下将介绍使用Spring MVC统一处理异常的解决和实现过程. 2 分析 Spring MVC处理异

Spring MVC的Controller统一异常处理:HandlerExceptionResolver

出现异常并不可怕,可怕的是出现了异常,你却不知道,也没有进行异常处理. Spring MVC的Controller出现异常的默认处理是响应一个500状态码,再把错误信息显示在页面上,如果用户看到这样的页面,一定会觉得你这个网站太LOW了. 要解决Controller的异常问题,当然也不能在每个处理请求的方法中加上异常处理,那样太繁琐.Spring MVC提供了一个HandlerExceptionResolver接口,可用于统一异常处理. HandlerExceptionResolver接口 pu