1@Component 2@Aspect 3@Slf4j 4public class LogAspect { 5 /** 6 * define point cut. 7 */ 8 @Pointcut("execution(* org.dog.server.controller.*.*(..))") 9 private void pointCutMethod() { 10 } 11 12 13 /** 14 * 环绕通知. 15 * 16 * @param pjp pjp 17 * @return obj 18 * @throws Throwable exception 19 */ 20 @Around("pointCutMethod()") 21 public Object doAround(ProceedingJoinPoint pjp) throws Throwable { 22 StopWatch watch = new StopWatch(); 23 watch.start(); 24 MethodSignature methodSignature = (MethodSignature) pjp.getSignature(); 25 log.info("-----------------------"); 26 log.info("---Around日志通知: 进入类: {}",pjp.getTarget().getClass().getName()); 27 log.info("---Around通知: 进入方法: {}",methodSignature.getName()); 28 log.info("---Around通知: 参数列表: {}",Arrays.toString(pjp.getArgs())); 29 Object o = pjp.proceed(); 30 watch.stop(); 31 log.info("接口耗时: {}",formatTime(watch.getTotalTimeMillis())); 32 log.info("-----------------------"); 33 return o; 34 } 35 36 /** 37 * 前置通知. 38 */ 39 @Before("pointCutMethod()") 40 public void doBefore() { 41// System.out.println("前置通知@Before执行"); 42 } 43 44 45 /** 46 * 后置通知. 47 * 48 * @param result return val 49 */ 50 @AfterReturning(pointcut = "pointCutMethod()", returning = "result") 51 public void doAfterReturning(String result) { 52 log.info("---后置通知:, 返回值: {}", result); 53 } 54 55 /** 56 * 异常通知. 57 * 58 * @param e exception 59 */ 60 @AfterThrowing(pointcut = "pointCutMethod()", throwing = "e") 61 public void doAfterThrowing(Exception e) { 62 log.info("@AfterThrowing异常通知, 异常: {}" , e.getMessage()); 63 } 64 65 /** 66 * 最终通知. 67 */ 68 @After("pointCutMethod()") 69 public void doAfter() { 70// System.out.println("@After最终通知执行"); 71 } 72 73 /** 74 * @description: TODO 毫秒转时分秒 75 **/ 76 public static String formatTime(Long ms) { 77 Integer ss = 1000; 78 Integer mi = ss * 60; 79 Integer hh = mi * 60; 80 Integer dd = hh * 24; 81 82 Long day = ms / dd; 83 Long hour = (ms - day * dd) / hh; 84 Long minute = (ms - day * dd - hour * hh) / mi; 85 Long second = (ms - day * dd - hour * hh - minute * mi) / ss; 86 Long milliSecond = ms - day * dd - hour * hh - minute * mi - second * ss; 87 88 StringBuilder sb = new StringBuilder(); 89 if(day > 0) { 90 sb.append(day).append("天"); 91 } 92 if(hour > 0) { 93 sb.append(hour).append("小时"); 94 } 95 if(minute > 0) { 96 sb.append(minute).append("分"); 97 } 98 if(second > 0) { 99 sb.append(second).append("秒"); 100 } 101 if(milliSecond > 0) { 102 sb.append(milliSecond).append("毫秒"); 103 } 104 return sb.toString(); 105 } 106 107 108}```
Springboot使用aop实现接口日志打印

把帆帆喂饱
2023-01-14
922 0 0
点赞
收藏
评论区
加载中...