使用AOP进行日志记录
我们应该首先思考使用哪一种类型的通知?切入点应该选在哪?
这是我们使用AOP编程必须思考的东西。
在这里
操作日志我采用了环绕通知类型(@Around)
错误日志我采用了异常通知类型(@AfterThrowing)
需要引入lib
commons-logging.jar
spring.jar
aspectjrt.jar
aspectjweaver.jar
cglib-nodep-2.*.*.jar
操作日志:
package com.scsk.common;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionMapping;
import org.apache.struts2.ServletActionContext;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import com.opensymphony.xwork2.ActionContext;
@Aspect
public class OptLogger {
@Around("execution(* com.scsk.*.web.action.*.*(..))")
public Object loggerOpt(ProceedingJoinPoint pjp) throws Throwable {
// 获取要执行的方法名和目标对象类型
String methodName = pjp.getSignature().getName();
String clazzName = pjp.getTarget().getClass().getSimpleName();
System.out.println("========= 操作日志记录 =========");
//这里使用了struts2的ActionContext,可以 方便的取出Session中的操作用户信息
Map<String,Object> session = (Map<String,Object>)ActionContext.getContext().getSession();
username = (String) session.get("username");
//后台打印,如果需要写入数据库,编写相应代码就可以完成操作了
System.out.println("Time:" + new Date().toString());
System.out.println("User:" + username);
System.out.println("Class:" + clazzName);
System.out.println("Method:" + methodName);
// 调用目标对象的方法
Object retVal = pjp.proceed();
return retVal;
}
}
错误日志
package com.scsk.common;
import java.io.IOException;
import java.util.Date;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
@Aspect
public class ExceptionLogger {
@AfterThrowing(pointcut = "execution(* com.scsk.*.web.action.*.*(..))", throwing = "ex")
public void loggerException(Exception ex) {
System.out.println("========= 异常错误记录 =========");
System.out.println("Time:" + new Date().toString());
System.out.println("Msg:" + ex.toString());
}
}
在spring配置文件中如下配置:
<bean id="exLogger" class="com.scsk.common.ExceptionLogger"></bean>
<bean id="optLogger" class="com.scsk.common.OptLogger"></bean>
<aop:aspectj-autoproxy proxy-target-class="true" />
这样我们的日志记录功能就完成了
分享到:
相关推荐
4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑实现 (需要知道原理的请看spring aop源码,此处不做赘述) 3、...
本资源用来展示如何使用 spring aop 进行日志记录,例子里面通过aop的配置,把产生的日志存放到当前项目的根目录下,而且对方法执行过程中的参数进行了记录,对于aop如何记录日志不清楚的同学可以看看。
spring AOP 切面日志 分层打日志
spring aop做的日志管理,网上看的,没测试过。
时间过的真快,转眼就一年了,没想到随手写的笔记会被这么多人浏览,不想误人子弟,于是整理了一个优化版。感谢各位同道的支持!
Spring AOP 日志管理 实例LoggingThrowsAdvice.java
swagger和spring Aop日志结合 ,swagger和spring Aop日志结合 ,swagger和spring Aop日志结合 ,
使用场景及目标: 在生产环境中,通过巧妙的AOP机制,实现对日志的细致记录和处理。我们的目标是提高日志记录的效率和规范性,为监控和故障排查提供更为轻松便捷的工具。 其他说明: 这一方法极为便捷,不仅简化了...
springaop拦截controller日志
Spring boot学习(六)Spring boot实现AOP记录操作日志.
采用SpringAOP拦截Controller,Service实现操作日志管理,统一处理异常,登陆日志管理,是SpringAOP的应用实践。通过SpringAOP的处理,可以方便移植日志管理功能,是个不错的学习demo
Spring AOP--日志管理,注释齐全,欢迎大家共同交流。
Spring之AOP在鉴权和日志记录中的应用
spring aop切面拦截指定类和方法实现流程日志跟踪 一般情况下,在不侵入业务代码的情况下,需要做流程日志跟踪是比较合理的 采用springaop切面思想
spring boot aop 统一处理日志 demo spring boot aop 统一处理日志 demo
可扩展性强:使用 Spring AOP 进行方法耗时监测,可以方便的对其他的切面进行扩展,例如:日志、异常处理、权限控制等切面。 4. 提高系统性能:通过对系统中的方法进行耗时监测,可以及时发现系统中的性能瓶颈,...
spring aop 拦截系统操作日志和异常日志,存储到数据库中的全过程
使用SpringAOP完成日志记录功能的实例
Spring mvc mybatis plus 实现AOP 切面日志系统,带有数据库。可以自行拓展
spring mvc利用aop日志实现对controller层的拦截