AOP记录慢日志

作者: 编程界的小学生 | 来源:发表于2017-04-07 18:19 被阅读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

    相关文章

      网友评论

        本文标题:AOP记录慢日志

        本文链接:https://www.haomeiwen.com/subject/znohattx.html