困扰了两天的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+日志拦截器+注解
基于Log4j+SpringAOP+Annotation的可注解日志切面组件 使用方式 @Log(logAfter = true, logBefore = true) public returntype methodName(params) 测试类com.liam.aop.aspect.test.AopLogAnnotationTest 测试输出 ...
自定义日志输出,加aop切面Controller,使用DRUID访问mysql,spring mvc基本框架搭建,适合初学者,页面适用IE6
系统功能模块 用户管理 提供用户的相关配置 角色管理 角色菜单分配权限 ...日志打印:logback+log4jdbc 接口文档 swagger2 其他:fastjson,aop,MapStruct等。 页面框架:Vue 前端源码:eladmin-qt 后端源码:eladmin
研究log4j开发的案例,研究学习用,目前还没用到aop层面,大神请绕道
此工程为使用eclipse创建java project,使用jdk1.8,项目中包含完整的代码和jar包,导入eclipse即可运行
Spring MVC AOP通过自定义注解方式拦截Controller等实现日志管理, springMVC里做添加AOP拦截,用于捕获异常。
spring boot aop 统一处理日志 demo spring boot aop 统一处理日志 demo
技术栈:maven项目管理,Spring + SpringMVC + Mybatis + Druid + Log4j + Shiro。其中,权限管理细化到每个URL,日志记录使用Spring AOP。也是自己随便搞搞,管理员页面使用了Super-ui开源框架,首页面支持响应式,...
项目日志记录是项目开发、运营必不可少的内容,有了它可以对系统有整体的把控,出现任何问题都有踪迹可寻。下面这篇文章主要给大家介绍了关于Spring MVC项目中log4J和AOP使用的相关资料,需要的朋友可以参考下。
在Spring1.2或之前的版本中,实现AOP的传统方式就是通过实现Spring的AOP API来定义Advice,并设置代理对象。Spring根据Adivce加入到业务流程的时机的不同,提供了四种不同的Advice:Before Advice、After Advice、...
AopLogAopLog是基于SpringAop和ThreadLocal实现的一个对请求方法埋点记录与处理的日志工具包。设计目的和场景:使用Spring Aop拦截程序,基本上都是同一个小异,不想日后每个项目都柏林都写一份这样的Aop拦截处理...
Spring Boot项目中使用Logback日志与使用AOP拦截请求日志信息
其中包含apache的log4j记录日志信息,spring管理组件,springmvc分层,springaop配置数据库事务控制,hibernate二级缓存配置,实现了查询,用户登录注册,请求验证是否登录等基础功能Demo,基于后台测试,使用前台...
使用面向切面的编程,构建一个日志记录的切面 a. 对于所有的Alumni表的查询操作,记录各个操作的时间、用户,读取内容,存入ReadLog表格中。 b. 对于所有的Alumni表的更新(更新和删除)操作,记录各个操作的时间、...
其中包含apache的log4j记录日志信息,spring管理组件,springmvc分层,springaop配置数据库事务控制,hibernate二级缓存配置,实现了查询,用户登录注册,请求验证是否登录等基础功能Demo,基于后台测试,使用前台...
主要介绍了Spring Boot2集成AOPLog来记录接口访问日志,日志是一个Web项目中必不可少的部分,借助它我们可以做许多事情,比如问题排查、访问统计、监控告警等,需要的朋友可以参考下
日志记录:以JSON格式输出日志,通过log4j配置日志文件输出方式。 日志查询:提供servlet加载日志文件,前台JSON处理查询对照。 详细作用说明参考:http://jingyan.baidu.com/edit/content?type=draft&did=3
AutoLogging 监控日志框架一个非常强大的监控日志输出框架,主要功能包含方法监控日志输出应用内调用链路追踪可以通过SpringAOP动态字节码运行时注入两种方式引入,只要一个注解即可开启所有功能,而且具有强大的可...