`

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"/>



优缺点

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

相关推荐

    struts2 日志拦截器

    日志拦截器就是这样的一个中间件,它在Action调用前和调用后自动记录相关的日志信息,无需在每个Action中手动添加日志代码。 Struts2框架默认提供了几个内置的拦截器,其中包括用于日志记录的`LoggerInterceptor`。...

    struts2.X 拦截器源码

    了解了拦截器的基本原理后,我们可以通过`Struts2.x 拦截器.avi`这个视频文件深入学习Struts2拦截器的实现细节,比如如何编写自定义拦截器、如何配置拦截器链、如何处理异常等。`readme.txt`可能是关于这个主题的...

    struts2 拦截器实例

    2. **默认拦截器栈**:`defaultStack`包含了Struts2内置的一些拦截器,如`params`(处理参数),`i18n`(处理国际化),`exception`(处理异常)等。 3. **应用全局拦截器**:现在,所有Action都会在执行前经过`...

    Struts2拦截器源码

    在Struts2框架中,拦截器扮演着至关重要的角色,它们是实现业务逻辑、验证、日志记录等功能的核心组件。下面将详细探讨Struts2拦截器的源码及其工作原理。 首先,理解拦截器的定义:拦截器是AOP(面向切面编程)的...

    一个Struts2的核心拦截器例子

    核心拦截器是Struts2框架的重要组成部分,它们允许开发者在动作执行前后插入自定义逻辑,以实现如日志、权限验证、数据校验等常见功能。下面将详细讲解Struts2的核心拦截器以及如何在项目中使用它们。 1. **Struts2...

    struts2拦截器实现拦截不文明字迹

    拦截器是Struts2框架的一个重要组成部分,能够帮助开发者实现一些在请求处理前后执行的通用逻辑,如日志记录、权限验证、数据校验等。在本场景中,我们将探讨如何使用Struts2拦截器来实现对不文明字迹或者敏感词汇的...

    JSP 开发之Struts2内建自定义拦截器.docx

    在Struts2中,拦截器(Interceptor)扮演着关键角色,它们允许开发者在Action执行前后插入自定义逻辑,比如日志记录、权限验证、数据校验等。本文将深入探讨Struts2的内建自定义拦截器及其配置。 首先,让我们理解...

    Struts2拦截器实现权限控制demo

    在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何利用拦截器来实现细粒度的用户权限管理。 首先,我们需要了解Struts2中的拦截器工作原理。拦截器是基于Java的动态代理模式实现的,它们按照配置的...

    Struts2拦截器源程序

    总结来说,Struts2拦截器是框架的核心部分,它们提供了一种灵活的方式,以实现各种功能,如日志记录、性能监控、权限控制等,同时保持代码的整洁和模块化。通过对`98struts201`文件的深入研究,我们可以更好地掌握...

    struts2拦截器应用小例子

    在Struts2中,拦截器(Interceptor)扮演着核心角色,它们允许开发者在动作执行前后插入自定义的逻辑,如日志、权限检查、数据验证等。本示例将探讨如何在Struts2中使用拦截器。 首先,我们需要理解Struts2拦截器的...

    Struts2默认拦截器解析.pdf

    13. **logger**:日志拦截器,记录Action的执行信息,帮助开发者调试和监控应用。 14. **modelDriven**:模型驱动拦截器,将Action的属性绑定到模型对象,简化Action的编写。 15. **scopedModelDriven**:范围模型...

    难经3:Struts2,拦截器拦不住Result?

    3. **异常处理**:当Action执行抛出异常时,Struts2默认会跳过剩余的拦截器并执行相应的异常Result。如果拦截器处理不当,可能会导致预期的Result无法执行。 4. **ActionInvocation**:`ActionInvocation`是Struts2...

    struts2拦截器原理

    在这个例子中,`defaultStack`是Struts2默认提供的拦截器栈,包含了一些基础的拦截器,如`params`(处理请求参数)、`i18n`(国际化)等。`myCustomInterceptor`则是我们自定义的拦截器。 创建自定义拦截器有三种...

    struts2 拦截器的使用(继承抽象拦截器)

    默认拦截器栈包含了Struts2框架预定义的一些拦截器,如`ExceptionMappingInterceptor`用于处理异常,`PrepareInterceptor`用于准备Action,`ModelDrivenInterceptor`用于模型驱动等。 3. `destroy()`: 这个方法在...

    struts2拦截器国际化

    Struts2的拦截器是一种AOP(面向切面编程)的概念,它在Action调用前后执行特定的逻辑,如日志记录、权限验证、数据校验等。拦截器通过配置在struts.xml或struts-plugin.xml文件中,按照定义的顺序进行调用。每个...

    struts2实现拦截器、

    在Struts2中,拦截器(Interceptor)是一个至关重要的概念,它允许开发者在动作执行前后插入自定义逻辑,比如权限检查、日志记录、性能监控等。本文将深入探讨如何使用Struts2实现拦截器,以及如何配置拦截器来实现...

    struts2 用拦截器 实现用户权限登录

    默认拦截器栈`defaultStack`包含了Struts2预定义的一些拦截器,如`params`、`i18n`等。在添加自定义拦截器时,可以将其插入到默认拦截器栈中,也可以创建自定义的拦截器栈。 ### 五、测试与优化 完成上述步骤后,你...

    Struts2的拦截器的使用详解

    在Struts2框架中,拦截器扮演着关键角色,它们提供了AOP(面向切面编程)的功能,使得开发者可以在不修改业务逻辑的情况下,对请求处理流程进行增强。本文将深入探讨Struts2的拦截器使用,结合实例和源码分析,帮助...

    Struts2默认拦截器解析[归类].pdf

    13. **LoggingInterceptor** - 日志拦截器:记录Action的执行信息,便于分析和监控。 14. **ModelDrivenInterceptor** - 模型驱动拦截器:将Action类与业务对象绑定,简化Action的编写。 15. **...

    struts2的一个自定义拦截器小例子

    本示例将聚焦于如何在Struts2中实现一个自定义拦截器。 首先,我们需要了解拦截器在Struts2中的作用。拦截器是AOP(面向切面编程)的一个核心概念,它允许开发者在动作执行前后插入额外的逻辑,如日志记录、权限...

Global site tag (gtag.js) - Google Analytics