`

使用Sping AOP记录操作日志和错误日志

    博客分类:
  • J2EE
阅读更多

使用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" />
 这样我们的日志记录功能就完成了
分享到:
评论
1 楼 daniaowansui 2016-03-15  
什么垃圾东西?

相关推荐

Global site tag (gtag.js) - Google Analytics