今日,为自己的开源项目加入日志模块,完成写日志功能,主要获取应用在执行过程中一系列调用的类,方法信息。该日志功能利用Spring 3 基于AspectJ 注解完成。
下面是日志切面类的代码(关键留意注解 @Aspect, @Before @After) 方法名可以自定义,但方法一定要带JoinPoint jp 这个参数,否则,无法获取执行类信息
@Aspect
public class LogDelegater implements ServiceUtil {
//自己实现的日志类,封装自己想要的日志格式,实现读写日志功能
private SystemLogger logger=new SystemLoggerImpl();
public LogDelegater() {
// TODO Auto-generated constructor stub
System.out.println("******loggerDelegate*******"+SystemLogger.getLogFile().getAbsolutePath());
}
@Before("execution(* *.*(..))")
public void doBefore(JoinPoint jp){
String log_msg=jp.toLongString();//获取目标对象方法执行信息
//DateUtil是自己写的日期时间类,方便使用
Logger.getLogger("Before"+jp.getTarget().getClass()).info(DateUtil.getNowDateStr()+" "+DateUtil.getNowTimeStr()+" "+log_msg);
logger.writeLogFile(DateUtil.getNowDateStr()+" "+DateUtil.getNowTimeStr()+" "+log_msg+" Execution..", SystemLogger.getLogFile());
}
@After("execution(* *.*(..))")
public void doAfter(JoinPoint jp){
String log_msg=jp.toLongString();//获取目标对象方法执行信息
//DateUtil是自己写的日期时间类,方便使用
Logger.getLogger("Before"+jp.getTarget().getClass()).info(DateUtil.getNowDateStr()+" "+DateUtil.getNowTimeStr()+" "+log_msg);
logger.writeLogFile(DateUtil.getNowDateStr()+" "+DateUtil.getNowTimeStr()+" "+log_msg+" Finish!", SystemLogger.getLogFile());
}
/**
* 一般业务执行方法,在此未被实现
*/
@Override
public boolean executeService(Object[] parms) {
// TODO Auto-generated method stub
return false;
}
把这个类配置到spring中
<!-- AOP切面bean,负责系统日志生成 -->
<bean id="logDelegater" class="com.amos.main.log.LogDelegater">
写完,最后在spring配置文件中加入如下一句:
<aop:aspectj-autoproxy proxy-target-class="true"/>
完成Aaop日志功能。
想了解更多,可以下载NetVinace源码或和我联系。
NetVinace源码: http://git.oschina.net/amosworkgroup/netvinace
来源:oschina
链接:https://my.oschina.net/u/225293/blog/134995