AOP记录慢日志

工作中我们需要实时知道哪些接口访问慢了,需要被优化。这个要怎么记录呢?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 [email protected]
 * @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配置

    
    
        ${loghome}/${appName}_slow.log
        
            ${HOSTNAME} %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36}:%L - %msg%n
            
        
        
            
                ${loghome}/${appName}_slow.%d{yyyy-MM-dd}.log
            
            15
            3GB
            true
        
    

    
        
        
    

Spring配置

 

若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


AOP记录慢日志_第1张图片
qrcode_for_gh_577b64e73701_258.jpg

你可能感兴趣的:(AOP记录慢日志)