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

/**
     * 所有异常报错
     * @param
     * @return
     * @throws Exception
     */
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public Result allExceptionHandler(HttpServletRequest request,
                                      Exception ex) {
RequestWrapper requestWrapper = new RequestWrapper(request);
String body = requestWrapper.getBody();
log.info("【参数】" + body);
String path = request.getServletPath();
ErrorLogsUtil.error(ex,path,body);
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.setString(3,params);
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` text,
`path` varchar(100) DEFAULT NULL,
`params` varchar(500) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

数据库配置用public static 会报错

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