架构师成长记

    科技2022-07-10  149

    文章目录

    通过日志监控service执行时间利用aop实现创建service的监控Thread.sleep(毫秒): 使线程挂起

    通过日志监控service执行时间

    利用aop实现

    创建service的监控

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

    Thread.sleep(毫秒): 使线程挂起

    Processed: 0.025, SQL: 8