通过AOP实现日志输出
在我们接触一个新的项目时候,往往不知道前端哪个按钮对应后端的哪个url,这样怎么办,接下来就可以用到了日志,使用日志功能实现快速定位到mapping。
使用AOP思想添加环绕增强型日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| package com.jia.mall.order.common.interceptor;
import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component;
@Aspect @Component @Slf4j public class RequestLogAspect { @Around("execution(* com.jia.mall.*.controller.*.*(..))") public Object logPointcut(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { String methodName = proceedingJoinPoint.getSignature().getName(); String classPath = proceedingJoinPoint.getSignature().getDeclaringTypeName(); long statrTime = System.currentTimeMillis(); Object[] args = proceedingJoinPoint.getArgs(); if (args != null && args.length > 0) { log.info("\r\n请求方法:{}.{}(..)\r\n请求参数:{}", classPath, methodName, args[0]); } else { log.info("\r\n请求方法:{}.{}(..)", classPath, methodName); } Object result = proceedingJoinPoint.proceed(); long endTime = System.currentTimeMillis(); log.info("\r\n请求方法:{}.{}(..)\r\n响应参数:{}\r\n响应时间:{}ms", classPath, methodName, result, endTime - statrTime); return result; } }
|
mybatis-plus添加sql语句输出
1 2 3
| mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
效果:
AOP注解
1、@Aspect
名称:@Aspect
类型:注解
位置:类定义上方
作用:设置当前类为切面类
格式:
1 2 3
| @Aspect public class AopAdvice { }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| * **说明:一个beans标签中可以配置多个aop:config标签**
### 2、@Pointcut
* 名称:@Pointcut * 类型:**注解** * 位置:方法定义上方 * 作用:使用当前方法名作为切入点引用名称 * 格式: ```java @Pointcut("execution(\* \*(..))") public void pt() { }
|
- 说明:被修饰的方法忽略其业务功能,格式设定为无参无返回值的方法,方法体内空实现(非抽象)
3、@Before
名称:@Before
类型:注解
位置:方法定义上方
作用:标注当前方法作为前置通知
格式:
1 2 3
| @Before("pt()") public void before(){ }
|
特殊参数:
4、@After
名称:@After
类型:注解
位置:方法定义上方
作用:标注当前方法作为后置通知
格式:
1 2 3
| @After("pt()") public void after(){ }
|
特殊参数:
5、@AfterReturning
名称:@AfterReturning
类型:注解
位置:方法定义上方
作用:标注当前方法作为返回后通知
格式:
1 2 3
| @AfterReturning(value="pt()",returning = "ret") public void afterReturning(Object ret) { }
|
特殊参数:
- returning :设定使用通知方法参数接收返回值的变量名
6、@AfterThrowing
名称:@AfterThrowing
类型:注解
位置:方法定义上方
作用:标注当前方法作为异常后通知
格式:
1 2 3
| @AfterThrowing(value="pt()",throwing = "t") public void afterThrowing(Throwable t){ }
|
特殊参数:
- throwing :设定使用通知方法参数接收原始方法中抛出的异常对象名
7、@Around
名称:@Around
类型:注解
位置:方法定义上方
作用:标注当前方法作为环绕通知
格式:
1 2 3 4 5
| @Around("pt()") public Object around(ProceedingJoinPoint pjp) throws Throwable { Object ret = pjp.proceed(); return ret; }
|
特殊参数: