JAVA 后台全局异常控制

一、为什么要进行异常控制

为什么要进行异常控制,在我们开发中,异常是最常见的问题,也是最不愿意看见的问题。但是我们也不得不看见,利用好异常能使我们快速成长,也能让开发人员快速定位异常,设计好了异常控制,能控制到这个异常是由谁产生的,何时产生的,产生的数据是什么,异常的方法是哪个,异常信息是什么等等,当我们利用好这些异常信息和数据,能让我们在开发过程中节约一部分时间和找问题的时间。

二、异常重现

例子1:我们在开发过程中,开发完成,对接也完成了,有一些异常还是会出来,而且这种异常是不定出现,可能这次操作出现异常,下次一样的操作就不会出现异常,这种异常在我们进行对接调试的时候非常麻烦,调试这个异常需要花费很长的时间。

例子2:我们在进行开发的时候,我们在进行对接调试的时候,日志会滚动很快,即使有异常也很难定位到异常信息位置,这样就会导致开发人员在定位异常上面花费时间,重新去点击这个异常出现,进行调试,这样也很花费时间。

例子3:当应用进行上线后,测试很科学,也没有发现任何异常,但是有的异常很奇怪,莫明的出现,这个时候我们就得去翻日志,在最开始的时候日志系统会全盘开着,每天可能就是多少个G的日志,要从中去找异常那犹如就是大海捞针,费神又费力。

有了这个异常控制以后,我们就可以在异常里面快速定位这个异常,异常的参数是什么,异常的异常信息是什么,如果根据异常信息读取找出问题所在方法和行数,如果实在找不出来,直接进行异常参数自我验证,找出异常原因,从而进行异常重现。

三、实现原理

1、整合spring实现异常拦截

         实现spring的接口HandlerExceptionResolver重写resolveException该方法,配置bean为<bean id="exceptionResolver" class="com.xxx.xxx.xxExceptionHandler"/>,如果采用注解,直接在类xxExceptionHandler注解@Component即可。该方法提供了几个参数,参数为:

(一)HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息

(二)HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。查看HttpServletResponse的API,可以看到这些相关的方法。

(三)Object对象包含了该请求的方法所有信息,通过这个对象提供的方法,可以获取到请求的控制器和方法。

(四)Exception对象包含了该请求的异常信息,通过这个对象可以获取到异常信息。

2、信息提取

在这一步非常的重要,数据提取好了可以直接定位异常,所以下一步说明数据提取。

(一)获取请求链接:

String url = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getServletPath();

(二)获取服务器IP

String serviceIp = request.getLocalAddr();

(三)获取客户端IP

String clientIp = request.getRemoteAddr();

(四)获取请求类型

String httpMethod = request.getScheme();

(五)获取字符集

String charEncoding = request.getCharacterEncoding();

(六)获取请求参数

Map<String, String[]> parameters = request.getParameterMap();

参数可以后期加工,是用JSON呢还是拼接成请求链接呢,都是可以的。

(七)获取异常控制器+方法

前面所提的参数第三点,Object就是请求异常的控制器和方法,可以强转为HandlerMethod获取更多信息,例如获取到只有控制器完整结果,但是获取到的结果和直接Object没得多大区别,都能定位到方法去。

(八)获取异常信息

前面所提参数Exception就是异常信息,直接使用就可以了,这个里面包含了异常完整信息。

3异常重现方式

这些异常存储到数据库,在进行一些手段控制,直接定位该异常是某个开发人员,开发人员解决没有,解决的时间是多久,等等....。

可以做一个后台异常信息管理,查看异常信息,如果异常信息中查看不出来问题,可以直接浏览器模拟发送请求,进行异常重现调试,这样非常快捷,为开发人员节省异常调试时间。可能在前期做这个异常管理期间会消耗一部分时间,总的来说做了这个异常管理,方便快捷舒适。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值