征服SpringJava&Spring基础技术Spring

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
上一篇下一篇

猜你喜欢

热点阅读