Springboot使用aop实现接口日志打印

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}```
点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

FLV文件格式

1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  

SpringBoot整合Redis乱码原因及解决方案

问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa

mysql设置时区

mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0

Spring Boot日志集成

!(https://oscimg.oschina.net/oscnet/1bde8e8d00e848be8b84e9d1d44c9e5c.jpg)SpringBoot日志框架SpringBoot支持JavaUtilLogging,Log4j2,Lockback作为日志框架,如果你使用star