系统中的异常处理和日志备份

一般框架发生异常都是将该异常抛出去(即框架本身没有处理异常的能力)

而我们为了解决异常的处理的难题我们采用的方法是struts2拦截器(以struts2为例)

具体实现:

第一步:定义一个类 继承MethodFilterInterceptor类

第二步:覆盖doIntercept方法

第三步:如果(actioninvocation.invoke();)  改行代码抛出异常。对该异常进行try()catch(){}

第四步:在catch模块中进行日志编写

第五步:在struts.xml中配置

代码实现:

protected String doIntercept(ActionInvocation actioninvocation) throws Exception {
// TODO Auto-generated method stub
//把自定义错误信息  放置到request中
HttpServletRequest request=(HttpServletRequest) actioninvocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
try{
String result=null;
//运行被拦截的Action,期间如果发生异常会被catch
result=actioninvocation.invoke();
return result;
}catch (Exception e) {
/**
* 处理异常
*/
String errorMsg="出现错误信息,请查看日志!";
//通过instanceof 判断到底是什么异常数据类型
if(e instanceof RuntimeException){
//未知的运行异常
RuntimeException re=(RuntimeException)e;
re.printStackTrace();
errorMsg=re.getMessage().trim();
}
/**
* 发送错误消息到页面
*/
request.setAttribute("errorMsg", errorMsg);

/**
*log4j记录日志 
*/
Log log=LogFactory.getLog(actioninvocation.getAction().getClass());
log.error("errorMsg",e);

return "errorMsg";

}

}

配置文件中配置(struts2.xml)

<!-- 自定义拦截器,实现异常处理,实现细颗粒权限控制 -->
<interceptors>
<!-- 声明拦截器 -->
<interceptor name="errorAndLimitInerceptor" class="com.xing.elec.utils.errorAndLimitInerceptor"></interceptor>
<!-- 配置拦截器栈 -->
<interceptor-stack name="myErrorAndLimitInterceptor">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="errorAndLimitInerceptor">
<!-- 该行代码 作用 :让自定义的拦截器对一下方法不起拦截作用 -->
<param name="excludeMethods">menuHome,title,left,change,loading,logout,alermStation,alermDevice,showMenu</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 覆盖底层的拦截器栈,对包中所有action都有效 -->
<default-interceptor-ref name="myErrorAndLimitInterceptor"></default-interceptor-ref>

总结:异常处理

1.使用struts2拦截器。

2.在拦截器中的doInterceptor()方法定义try()catch(){}捕获异常

3.如果Action、Service、Dao没有抛出异常,则在try模块中指定正确操作的页面,例如:

result=actioninvocation.invoke();

return result;  result为跳转的正确页面

4.如果Action、Service、Dao抛出异常,则在catch模块中,捕获异常,使用log4.j存放到指定的日志文件中,通过return “errorMsg”; 跳转到错误页面

你可能感兴趣的:(系统中的异常处理和日志备份)