zoukankan      html  css  js  c++  java
  • 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 会报错

  • 相关阅读:
    人月神话阅读笔记03
    学习进度十六
    计算最长英语链
    学习进度十五
    人月神话阅读笔记02
    找“水王”
    学习进度十四
    用户体验评价
    学习进度十三
    学习进度十二
  • 原文地址:https://www.cnblogs.com/lyon91/p/10395334.html
Copyright © 2011-2022 走看看