`

struts2默认异常日志拦截器

 
阅读更多
文章转自:http://hi.baidu.com/wuhuijinshen/blog/item/4418d54577b40557510ffef0.html

我们写的系统在运行过程中会发生一些意想不到的bug,为了跟踪这些bug,常做的方式是使用try块,在捕获异常后把信息写入日志。假如有一个历史遗留系统,它没有做异常捕获日志,而现在需要加上日志,怎么办呢?


如果你了解AOP,你会知道不必重写try块。而struts2的拦截器实现原理就是AOP,strut2中提供了一个异常拦截器ExceptionMappingInterceptor,在发生指定异常后,会由它处理。从它的源码可以知道,这个类是有写日志的功能的,就是默认是禁用了,最快的实现就是直接启用它的日志功能。


Struts2异常配置

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstrutsPUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">

<struts>

<!--继承struts-default以便使用它的拦截器stack——defaultStack-->

<packagename="youname"extends="struts-default"namespace="/youurl">


<!--定义一个拦截器stack -->

<interceptors>

<interceptor-stackname="logException">

<interceptor-refname="defaultStack"/>

<!--覆盖defultStack中的exception设置,启用它的日志功能-->

<interceptor-refname="exception">

<paramname="logEnabled">true</param>

<paramname="logLevel">info</param>

</interceptor-ref>

</interceptor-stack>

</interceptors>

<!--修改默认的拦截器stack,原来是defaultStack -->

<default-interceptor-refname="logException"/>



<!--全局跳转-->

<global-results>

<resultname="exception">/500.jsp</result>

</global-results>


<!--定义要捕获的异常-->

<global-exception-mappings>

<exception-mappingresult="exception"exception="java.lang.Exception"/>

</global-exception-mappings>


</package>

</struts>



日志配置

在src中配置log4j.properties文件,略。



个性化日志输出

如果不想使用ExceptionMappingInterceptor中自带的日志输入方式,可以自己实现一个拦截器,然后在上面的<interceptors>元素前定义它,如:

<interceptor name="exception" class="com.yourInterceptor"/>



优缺点

这种方式可以记录没有处理的异常(包括没有捕获处理的运行时异常和已经捕获处理,但继续往上层抛出的异常),对于那些被捕获但不往上层抛出的异常,由于异常拦截器无法捕获,也就无法写日志。
分享到:
评论

相关推荐

    java后台框架源码

    filter:Log4jFormatFilter(格式化log4j日志输出的),SessionCheckFilter(登陆拦截器) interceptor:权限拦截包 listener:目前只有session的监听器,用于监听session的 service:具体的业务处理包 util:项目工具包 ...

    应用级产品开发平台APDPlat.zip

    2)、前端控制器使用Struts2。 3)、IOC容器使用Spring。 4)、ORM使用JPA,默认实现是Hibernate。 5)、内置搜索(OSEM)使用Compass。 6)、认证授权使用SpringSecurity。 7)、代码生成使用Freemarker。 8)、日志...

    Spring面试题

    基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件 8. Struts的validate框架是如何验证的? 在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。 9. 说下Struts...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     9.2 利用拦截器(Interceptor)生成审计日志  9.3 Hibernate的事件处理机制  9.4 批量处理数据  9.4.1 通过Session来进行批量操作  9.4.2 通过StatelessSession来进行批量操作  9.4.3 通过HQL来进行批量操作 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     9.2 利用拦截器(Interceptor)生成审计日志  9.3 Hibernate的事件处理机制  9.4 批量处理数据  9.4.1 通过Session来进行批量操作  9.4.2 通过StatelessSession来进行批量操作  9.4.3 通过HQL来进行批量操作 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     9.2 利用拦截器(Interceptor)生成审计日志  9.3 Hibernate的事件处理机制  9.4 批量处理数据  9.4.1 通过Session来进行批量操作  9.4.2 通过StatelessSession来进行批量操作  9.4.3 通过HQL来进行批量操作 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     9.2 利用拦截器(Interceptor)生成审计日志  9.3 Hibernate的事件处理机制  9.4 批量处理数据  9.4.1 通过Session来进行批量操作  9.4.2 通过StatelessSession来进行批量操作  9.4.3 通过HQL来进行批量操作 ...

    webx3框架指南PDF教程附学习Demo

    • Struts • Webwork • Tapestry • Spring MVC 以上框架都是非常优秀的。说实话,如果阿里巴巴网站在2001年开始,就有这么多可选择的话,无论选择哪一个都不会有问题。因为这些年来,所有的开源Web框架都在...

Global site tag (gtag.js) - Google Analytics