`
孤星119
  • 浏览: 124203 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring Aop+Log4j 动态日志

 
阅读更多

困扰了两天的Spring Aop+log4j动态日志Demo.

 

实现的功能:SSH框架,对Action/Service/Dao 三层的方法使用Spring Aop进行日志的添加(排除Action内的set get方法等)

 

遇到的问题:

      Action层使用Spring Aop添加日志后,竟然获取不到前台提交的参数(就是这个问题困扰了太久,其它很 简单,service dao层的方法 都能正常)

 

 问题解决方案以及注意事项

      1).将Aop配置为 proxy-target-class="true"(基于类的代理)

      2).若设置 proxy-target-class="true",需要导入cglib相关包, 但不要导入cglib jar包,而应该使用cglib-nodep  jar包, 譬如我用的是 cglib-nodep-2.2.3.jar.  用cglib jar包,会报异常: Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V

     3).Struts2的action 需交给Spring容器去管理

 

相关的代码

 1.Log类

 

package com.miao.log;

import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;


public class MyLog {
	Logger logger = Logger.getLogger(MyLog.class);
	String logStr = null ;
	
	
	/**
	 * 前置通知:在某连接点之前执行的通知,但这个通知不能阻止连接点前的执行
	 */
	public void doBefore(JoinPoint jp) {	
		logStr = jp.getTarget().getClass().getName() + " 类的 "
				+ jp.getSignature().getName()+" 方法开始执行 ***Start***";
		logger.info(logStr);
	}
	
	
    /**
     * 环绕通知:包围一个连接点的通知,可以在方法的调用前后完成自定义的行为,也可以选择不执行
     */
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
    	
    	Object result=null;
		try{  
			result = pjp.proceed();  
		}catch(Exception e){  
			logStr = "方法:"+pjp.getTarget().getClass() + "." + pjp.getSignature().getName()+ "()  ";
			logStr = logStr+"错误信息如下:["+e+"]";
			logger.info(logStr); 
		}
  
        return result;
    }
    
    
    /**
     * 后置通知
     */
    public void doAfter(JoinPoint jp) {
    	logStr =jp.getTarget().getClass().getName() + " 类的 "
    			+ jp.getSignature().getName() +" 方法执行结束 ***End***"; 
    	logger.info(logStr);
    }
    
    
}

 

 

2.Spring Aop日志相关配置

	<!-- 
	    配置日志 使用Aop 记录日志  
	    注意:
		1). 此处proxy-target-class="true" 否则Action内的参数会被拦截掉,导致action内无法获得前台传递的参数 
		2). Action需交给spring容器去管理
	-->
	<aop:config expose-proxy="true" proxy-target-class="true">
	    <aop:aspect  id="aopRiZhiAspect" ref="myRiZhi"> 
	    <!-- 对哪些方法进行日志记录, 此处屏蔽action内的set get方法 -->
            <aop:pointcut id="aopRiZhi" expression="(execution(* com.miao.*.*.*.*(..)) ) and (!execution(* com.miao.*.action.*.set*(..)) ) and (!execution(* com.miao.*.action.*.get*(..)) )" />  
            <aop:before pointcut-ref="aopRiZhi" method="doBefore"/>  
            <aop:after pointcut-ref="aopRiZhi" method="doAfter"/>  
            <aop:around pointcut-ref="aopRiZhi" method="doAround"/>  
        </aop:aspect>
	</aop:config>


	<beans>
		<bean id="myRiZhi" class="com.miao.log.MyLog"></bean>	<!-- Aop日志类 -->
		<bean id="logonAction" class="com.miao.logon.action.LogonAction" scope="prototype" ></bean>	<!-- 要使用spring aop记录日志的action 需要交给spring容器来管理 -->
	</beans>

 

 

3.log4j配置, Struts配置等略, 注意需要的jar包即可,附件是去掉jar包后的项目

  

 

分享到:
评论

相关推荐

    ssh+aop+log4j+日志拦截器+注解

    标题中的"ssh+aop+log4j+日志拦截器+注解"涉及到的是Java Web开发中的几个核心组件和技术,这些技术在构建大型、分布式的企业级应用时常常被使用。下面将详细介绍这些知识点: 1. SSH (Spring, Struts, Hibernate)...

    spring简单注解+log4j记录日志

    综上所述,"spring简单注解+log4j记录日志"这个主题涵盖了Spring框架中的注解使用、Log4j日志系统以及AOP的应用。通过学习这些内容,初学者可以更好地理解和实践Spring框架,同时提高代码的可维护性和调试效率。在...

    spring+springmvc+mybatis+log4j+springtest的demo

    这是一个基于Java技术栈的Web应用示例项目,主要采用了Spring、SpringMVC、MyBatis、Log4j和SpringTest等组件。以下是这些技术及其在项目中的应用详解: 1. **Spring**:Spring是一个全面的Java企业级应用开发框架...

    spring+springMVC+mybatis+log4j框架整合

    本文将深入探讨这些框架的集成以及log4j日志系统的应用。 首先,Spring框架作为核心,它提供了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等功能,有助于简化应用的...

    springmvc中使用log4j及aop记录日志的例子

    在这个例子中,我们将讨论如何将Log4j与Spring MVC和AOP结合,实现方法调用前后的日志打印。 首先,让我们了解Log4j的基本配置。Log4j的配置文件通常是`log4j.properties`或`log4j.xml`,定义了日志的级别(如DEBUG...

    spring mvc +mysql+log4j+aop

    综上,这个项目涵盖了Spring MVC作为web应用的核心框架,利用MySQL存储和处理数据,Log4j实现日志记录,AOP增强Controller的功能,DRUID作为高效的数据库连接池,以及对旧版浏览器的兼容性处理。对于初学者来说,这...

    spring+hibernate+log4j所需要的jar包

    Spring、Hibernate和Log4j是Java开发中三个非常重要的库,它们各自负责不同的领域,而将它们结合在一起,可以构建出强大的企业级应用系统。 Spring是一个全面的后端应用程序框架,它提供了依赖注入(DI)和面向切面...

    struts+spring+hibernate+log4j+dom4j等源码

    在实际项目中,开发者可能会将Struts的Action与Spring的Bean集成,通过Spring的AOP实现事务管理和日志记录,使用Hibernate的Session接口执行数据库操作,以及利用Dom4j解析和生成XML文档。这个组合为开发者提供了...

    Spring.net + MVC + EF + EasyUI + Log4net

    标题 "Spring.net + MVC + EF + EasyUI + Log4net" 涉及到的是一个基于.NET Framework的Web开发框架组合,主要用于构建高效、可扩展的企业级应用。下面将详细介绍这些技术及其相互间的配合。 1. **Spring.NET**:这...

    aop-log-annotation:基于Log4j+SpringAOP+Annotation的可注解日志切面组件

    基于Log4j+SpringAOP+Annotation的可注解日志切面组件 使用方式 @Log(logAfter = true, logBefore = true) public returntype methodName(params) 测试类com.liam.aop.aspect.test.AopLogAnnotationTest 测试输出 ...

    struts+hibernate+spring+xdoclet+ant+log4j

    Struts负责前端的交互逻辑,Hibernate处理数据持久化,Spring作为胶水层整合所有组件并提供事务管理,XDoclet自动化配置减少重复工作,Ant确保构建过程的标准化,而Log4j则提供详细的日志信息,便于问题排查。...

    struts2 + spring + tiles + log4j blank framewotk

    Struts2、Spring、Tiles和Log4j是Java Web开发中的四大核心框架,它们共同构建了一个强大且灵活的基础架构,适用于构建复杂的企业级应用程序。以下将详细解释这四个框架及其在实际开发中的应用。 **Struts2框架**:...

    Spring2.0+hibernate3.1+log4j+mysql demo

    标题“Spring2.0+hibernate3.1+log4j+mysql demo”揭示了一个集成开发环境,其中包含了四个核心的技术组件:Spring框架的2.0版本、Hibernate ORM框架的3.1版本、日志工具log4j以及MySQL数据库。这个组合常用于构建...

    Spring AOP + AspectJ annotation example

    在IT行业中,Spring框架是Java企业级应用开发的首选,而Spring AOP(面向切面编程)则是其重要组成部分,它允许我们分离关注点,尤其是跨切面的系统级服务,如日志、事务管理等。AspectJ是Spring AOP支持的一种强大...

    maven+Springmvc+spring+mybatis+log4j的Demo

    5. Log4j:Log4j是一个日志记录框架,它提供灵活的日志记录控制,可以根据需要调整日志级别,方便调试和问题排查。在项目中,Log4j用于记录应用程序运行过程中的各种信息,包括错误、警告和调试信息,帮助开发者跟踪...

    struts2+hibernate+spring+mysql+tomcat+log4j

    Struts2、Hibernate、Spring、Log4j、Tomcat 和 MySQL 是Java Web开发中的关键组件,它们共同构建了一个高效、可扩展的Web应用程序框架。以下是对这些技术的详细解释: **Struts2**:Struts2是一个基于MVC(Model-...

    Maven多模块 + Spring4.0.6 + SpringMVC4.0.6 + Mybatis 3.2.7 + log4j 2.1

    这个项目使用了Maven进行模块化管理,版本分别对应于Spring 4.0.6、SpringMVC 4.0.6和Mybatis 3.2.7,日志处理则采用了log4j 2.1。下面将详细讲解这些技术及其在项目中的应用。 **Maven多模块项目** Maven是一个...

    Maven+Spring+SpringMVC+Mybatis+Log4j+EasyUI1.3.2+Oracle实例

    这是一个基于Java技术栈的Web应用实例,整合了Maven、Spring、SpringMVC、Mybatis、Log4j和EasyUI1.3.2,并且采用了Oracle数据库。让我们逐一解析这些技术及其在项目中的作用。 **Maven**: Maven是一个项目管理和...

    Maven spring+springMvc+MyBatics+Redis+Shiro+PageHelp+Quartz+Log4j

    8. Log4j:Log4j是一个日志记录框架,提供灵活的日志配置,帮助开发者追踪和分析程序运行中的问题。它可以根据不同级别记录信息,便于调试和故障排查。 这个项目提供的"WizardFirstFrame"可能是项目初始化的框架...

Global site tag (gtag.js) - Google Analytics