编写切面日志
项目上线,我被派去部署项目,在项目部署时,log成为了我的块心病。因为项目方法执行较多,一直输出DEBUG,实在受不了了,我把级别调高了。但是我们组长说优化一下项目日志吧,我就开始苦B的学习怎么写切面日志了。
一说切面日志,就得谈一谈Aop,详谈Aop就要从动态代理说了,那什么是动态代理那,顾名思义就是灵活的替代做某件事。我读过一篇博文讲的很形象,用一场相亲讲述了动态代理的用途。
我们正常相亲是自己想找一个什么样子的对象,然后按照这个标准自己开始四处撒网了。但是有动态代理后,这个相当于一个婚姻介绍所,你把心中理想的目标的要求提出了,交给介绍所,剩下的等电话来相亲就好了,不用亲力亲为。
这是之前写的文章如果对切面有兴趣可以看一下我写的这个代码,防止暴力访问的切面类https://blog.csdn.net/smd2575624555/article/details/82759863
这样我们在说一下Aop,给大家推荐一篇文章,更有助于Aop的理解:http://blog.csdn.net/haluoluo211/article/details/52046937
理解aop后,开始正菜了。
首先需要引入log的jar
<!-- 日志处理 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</dependency>
在spring配置文件里配置切面:
<aop:aspectj-autoproxy proxy-target-class="true">
<aop:include name="logAspect" />
</aop:aspectj-autoproxy>
<bean id="logAspect切面类名" class="com.common.utils.LogAspect切面路径" />
编写日志切面
import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
/**
* 日志切面类
*
*/
@Aspect
public class LogAspect {
private static Logger_log = Logger.getLogger(LogAspect.class);
@Around("execution(* *..controller..*.*(..))")
public Object doAround(ProceedingJoinPointpjp) throws Throwable {
Long startTime = System.currentTimeMillis();
Object result = pjp.proceed();
Long endTime = System.currentTimeMillis();
_log.info("正在执行" +pjp.getSignature().toShortString() + ", 方法耗时为" + (endTime - startTime) / 1000 + "秒");
return result;
}
}
基本上完成了面向切面的全过程