`

struts2 使用拦截器记录异常日志

 
阅读更多

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

 

AOP

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

 

Struts2异常配置

<?xml version="1.0" encoding="UTF-8"?>

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

<struts>

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

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

   

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

    <interceptors>

           <interceptor-stack name="logException">

              <interceptor-ref name="defaultStack" />

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

              <interceptor-ref name="exception">

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

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

              </interceptor-ref>

           </interceptor-stack>

       </interceptors>

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

       <default-interceptor-ref name="logException"/>

   

   

       <!--全局跳转-->

       <global-results>

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

       </global-results>

 

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

       <global-exception-mappings>

           <exception-mapping  result="exception" exception="java.lang.Exception" />

       </global-exception-mappings>

 

    </package>

</struts>

       

       

日志配置

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

 

 

个性化日志输出

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

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

 

 

优缺点

 

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

分享到:
评论

相关推荐

    Struts2拦截器及其用法详细说明

    这篇文章将深入探讨Struts2拦截器的概念、工作原理以及如何在实际应用中使用它们。 **一、什么是Struts2拦截器** 拦截器是基于AOP(面向切面编程)思想的组件,它可以理解为在Action调用前后插入的逻辑处理。在...

    struts2 日志拦截器

    日志拦截器在Struts2中扮演着至关重要的角色,它允许开发者记录和控制应用程序中的各种操作,以便于调试、性能分析和日志记录。在本篇文章中,我们将深入探讨Struts2的日志拦截器,以及如何使用`LoginfoInterceptor....

    使用struts拦截器+注解实现日志审计功能

    4. **使用注解**:在Action类或Action方法上添加`@AuditLog`注解,表示这个方法的执行需要被拦截器记录日志。 5. **运行和测试**:部署应用,执行包含`@AuditLog`注解的方法,查看日志输出,确认日志审计功能是否...

    struts2 拦截器

    1. **日志与异常处理**:拦截器可以记录Action的执行过程,捕获并处理运行时异常,提高程序的健壮性。 2. **性能监控**:通过拦截器可以统计Action的执行时间,进行性能分析。 3. **权限验证**:拦截器可以实现用户...

    使用struts2拦截器对登陆权限验证

    在Struts2中,拦截器(Interceptor)扮演着至关重要的角色,它允许开发者在动作执行前后插入自定义逻辑,如日志记录、权限验证等。在本案例中,我们将深入探讨如何使用Struts2拦截器实现登录权限验证,同时结合...

    Struts2拦截器源码

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

    struts2 拦截器实例

    3. **配置拦截器**:拦截器可以通过Struts2配置文件或注解进行配置,指定在哪些Action上使用哪些拦截器。 ### 二、单个Action配置拦截器实例 1. **创建拦截器**:首先,我们需要创建一个实现了`Interceptor`接口的...

    Struts2学习案例(拦截器)

    在Struts2中,拦截器是基于Java的动态AOP(面向切面编程)实现的,它可以在Action调用前后插入额外的逻辑,比如日志记录、权限验证、事务管理等。拦截器通过配置文件或者注解与Action关联,形成一个拦截器栈,每个...

    Struts2的拦截器的使用详解

    本文将深入探讨Struts2的拦截器使用,结合实例和源码分析,帮助你更好地理解和运用这一特性。 一、拦截器的概念与作用 拦截器是Struts2框架的核心组件之一,它是在动作执行前后插入的一段代码,能够对请求进行...

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

    例如,可以使用拦截器实现登录验证、日志记录、性能监控等功能。拦截器通过链式结构串联起来,形成一个执行栈,每个Action调用会按照栈中的顺序逐个执行拦截器。 **Result 概念** Result是Action执行后的一个结果...

    Struts2 拦截器

    拦截器是在Action调用之前和之后执行的一段代码,可以用来做日志记录、权限检查、事务管理、性能监控等。这些操作无需在每个Action中重复编写,而是通过配置就可以全局应用。Struts2的拦截器基于AOP(面向切面编程)...

    Struts2拦截器原理分析

    在文章"Struts2拦截器原理分析实例"中,作者通过一个具体的应用场景,展示了如何配置和使用拦截器来实现特定的功能,比如日志记录或权限验证。通过阅读这篇博客,我们可以更直观地理解拦截器的工作方式和价值。 ...

    struts2.X 拦截器源码

    在Struts2中,拦截器扮演着中间件的角色,它在Action执行前后进行处理,可以进行如日志记录、权限检查、数据验证等操作,极大地提高了代码的复用性和可维护性。 首先,我们需要理解拦截器的工作原理。在Struts2框架...

    创建自己struts2拦截器

    Struts2是一个强大的MVC框架,它通过使用拦截器(Interceptor)来实现业务逻辑与表现层的解耦,提供了一种灵活的扩展机制。在Struts2中,拦截器是AOP(面向切面编程)的一种实现,它可以监控、修改或增强方法调用的...

    struts2 Interceptor拦截器

    ### Struts2 Interceptor 拦截器详解 #### 一、概述 在现代Web开发中,特别是基于Java的Web应用程序开发中,Struts2框架因其简洁性和强大的扩展能力而备受青睐。Struts2框架的核心设计理念之一是MVC(Model-View-...

    struts2拦截器

    拦截器可以用于日志记录、权限检查、事务管理、性能监控等多种用途。 在本项目中,"struts2拦截器"被用来实现分限制游客浏览和会员浏览的功能。这通常涉及到用户身份验证和授权。例如,某些页面可能只对登录的会员...

    struts2 单文件,多文件上传及拦截器实现异常处理

    在Struts2中,我们可以使用拦截器(Interceptor)来捕获和处理异常。定义一个自定义拦截器,继承`Interceptor`接口,重写`intercept`方法。在这个方法中,你可以检查Action执行是否抛出异常,并根据异常类型采取相应...

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

    这篇博客文章“struts2 拦截器的使用(继承抽象拦截器)”探讨了如何通过继承Struts2的抽象拦截器来创建自定义拦截器。 首先,让我们理解拦截器的基本概念。在Struts2中,拦截器是基于Java的动态代理机制实现的,...

    Struts2之拦截器原理分析及使用-上案例struts007

    Struts2还提供了一些内置的拦截器,如params(处理请求参数)、i18n(国际化支持)、exception(异常处理)等。这些拦截器极大地丰富了框架的功能,减少了开发者的工作量。 总的来说,Struts2的拦截器机制是其强大...

    struts2内置拦截器简介

    Struts2的内置拦截器主要包括以下几类:用于异常处理、参数绑定、会话管理、调试等功能。每个拦截器都有特定的作用,可以根据需求选择合适的拦截器组合使用。 #### 2. 常用内置拦截器详解 ##### 2.1 Exception 此...

Global site tag (gtag.js) - Google Analytics