AOP记录慢日志
2017-04-07 本文已影响146人
编程界的小学生
工作中我们需要实时知道哪些接口访问慢了,需要被优化。这个要怎么记录呢?AOP可以记录!
package com.bshf.recipe.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
* AOP拦截Service层,记录慢日志。
*
* @author 15620646321@163.com
* @date 2017-04-07 17:56:43
*/
@Component
@Aspect
public class LogAOP {
private static Logger SLOW_LOG = LoggerFactory.getLogger("slowLog");//慢日志
private final String CUT = "execution (* com.bshf.recipe.service.*.impl.*ServiceImpl.*(..))";//切点表达式
@Around(CUT)
public Object around(ProceedingJoinPoint pjp) throws Throwable{
Object[] args = pjp.getArgs();
Object result = null;
long start = System.currentTimeMillis();
try{
result = pjp.proceed(args);
} catch(Exception e){
throw e;
}
//慢日志
long end = System.currentTimeMillis();
if(end - start >= 1000){//大于一秒记录
SLOW_LOG.info("" + pjp.getSignature().getName()+" cost "+(end-start)+"ms ---------------");
}
return result;
}
}
这里记录的是serviceImpl层,大于1s以上就被视为慢日志,就被记录到慢日志的log文件里。
catch的异常会被我们自定义异常处理器捕获。
logback配置
<!-- 慢日志 -->
<appender name="FILE_SLOW"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${loghome}/${appName}_slow.log</file>
<encoder>
<pattern>${HOSTNAME} %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36}:%L - %msg%n
</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>
${loghome}/${appName}_slow.%d{yyyy-MM-dd}.log
</fileNamePattern>
<maxHistory>15</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
<CleanHistoryOnStart>true</CleanHistoryOnStart>
</rollingPolicy>
</appender>
<logger name="slowLog" level="debug" additivity="false">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE_SLOW"/>
</logger>
Spring配置
<aop:aspectj-autoproxy proxy-target-class="true"/>
若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:
qrcode_for_gh_577b64e73701_258.jpg