结合log4j和aspectJ进行
1.导入相关jar,这里给出图片,正常可以在maven 中进行依赖,自行百度一下
2.application Context.xml启用aspect J自动代理
其中 proxy-target-class 含义如图,false:通过Java动态代理,true 为cglib代理
Java动态代理:newInstance(classLoader,interface,new innokeHandler()),动态代理生成类通过业务接口的方法,来实现实现类的实现方法
cglib代理:通过继承方式,实现。
具体可以参考:http://www.cnblogs.com/ygj0930/p/6542259.html
package com.kyee.hrp_local.comm;
import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
/**
* 新框架成本日志输出
* xueshuai
* 2019.05.07
*/
@Aspect //切面
@Component
public class LoggerAop {
//日志
private Logger logger = Logger.getLogger(this.getClass());
//定义切入点:自定义的注解/给定的某个类
// @Pointcut("@annotation(LoggerAnoation)")
// 第一个*号:表示返回类型, *号表示所有的类型。
// com.kyee.hrp_local.cost 包名
// *(..)所有方法所有参数
//..所有子包
@Pointcut("execution(* com.kyee.hrp_local.cost..impl.*.*(..)) ")
public void logPoint(){
}
@Before("logPoint()")
public void beforePoint(JoinPoint point){
//获取方法名
Signature signature = point.getSignature();
String methodName = signature.getName();
//获取类名
String pointTarget = point.getTarget().getClass().toString();
logger.info(pointTarget+"."+methodName+" is begin");
}
@After("logPoint()")
public void afterPonint(JoinPoint point){
//获取方法名
Signature signature = point.getSignature();
String methodName = signature.getName();
//获取类名
String pointTarget = point.getTarget().getClass().toString();
logger.info(pointTarget+"."+methodName+" is end");
}
//报错后出现
@AfterThrowing("logPoint()")
public void exceptionLogger(JoinPoint point){
//获取方法名
Signature signature = point.getSignature();
String methodName = signature.getName();
//获取类名
String pointTarget = point.getTarget().getClass().toString();
logger.info(pointTarget+"."+methodName+" have errors");
}
}