zoukankan      html  css  js  c++  java
  • 通过日志监控service执行时间

    1、使用AOP, 引入aop依赖

        

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>

    2、新增 ServiceLogAspect.java 配置AOP通知,重点是环绕通知,切面表达式

      

    package com.imooc.aspect;
    
    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;
    
    @Component
    @Aspect
    public class ServiceLogAspect {
    
        public  static  final Logger logger = LoggerFactory.getLogger(ServiceLogAspect.class);
        /*
         *AOP通知:
         * 1.前置通知:在方法调用之前执行
         * 2.后置通知:在方法正常调用之后执行
         * 3.环绕通知:在方法调用之前和之后,都分别可以执行的通知
         * 4.异常通知:如果在方法调用过程中发生异常,则通知
         * 5.最终通知:在方法调用之后执行
         */
    
        /**
         * 切面表达式
         * execution 代表所有执行的表达式主体
         * 第一处 * 代表方法返回类型 *代表所有类型
         * 第二处 包名代表aop监控的类所在的包
         * 第三处 。。 代表该包以及其子包下的所有类方法
         * 第四处 * 代表类名,*代表所有类
         * 第五处 *(..) *代表类中的方法名,(..)表示方法中的任何参数
         * @param joinPoint
         * @return
         * @throws Throwable
         */
        @Around("execution(* com.imooc.service.impl..*.*(..))")
        public  Object recordTimeLog(ProceedingJoinPoint joinPoint) throws Throwable {
                logger.info("======== 开始执行 {}.{}==========",
                         joinPoint.getTarget().getClass(),
                         joinPoint.getSignature().getName());
                long beginTime = System.currentTimeMillis();
                Object result= joinPoint.proceed();
    
                long endTime = System.currentTimeMillis();
                long takeTime=endTime - beginTime;
    
                if (takeTime >3000 ) {
                    logger.error("====== 执行结束,耗时:{} 毫秒 ======",takeTime);
                }else if(takeTime>2000){
                    logger.warn("====== 执行结束,耗时:{} 毫秒 ======",takeTime);
                }else
                {
                    logger.info("====== 执行结束,耗时:{} 毫秒 ======",takeTime);
                }
                return  result;
        }
    
    }
    View Code

    3.开启mybatis sql执行日志打印

      修改 src/main/resources/application.yml

    ############################################################
    #
    # mybatis 配置
    #
    ############################################################
    mybatis:
      type-aliases-package: com.imooc.pojo          # 所有POJO类所在包路径
      mapper-locations: classpath:mapper/*.xml      # mapper映射文件
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  • 相关阅读:
    周末、广州、WEB安全测试实战训练
    WEB安全测试实战训练周末精品班课程圆满结束!
    常用渗透性测试工具
    大家还在迷信工具么?
    团购网站安全性普遍堪忧
    网页安全漏洞检测 隐藏字段
    用ModSecurity+PhantomJS进行服务器端XSS攻击检测
    关于HP WebInspect 9.1
    AQA(www.AutomationQA.com)开始连载《Web Security Testing Cookbook》学习笔记
    从团购网的漏洞看网站安全性问题
  • 原文地址:https://www.cnblogs.com/callbin/p/14482307.html
Copyright © 2011-2022 走看看