<!--Aop-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
/**
* @Auther: dingjn
* @Desc: Service层日志切面
*/
@Slf4j
@Aspect
@Component
public class ServiceLogAspect {
/**
* 切点
* 切面表达式:
* 第一个 *:代表方法返回类型,*代表所以类型
* 第二个包名:代表aop监控的类所在的包
* 第三个 *:代表包下的所有类
* 第四个 *(..):*代表类下的所有方法,(..)代表方法中的任何参数
*/
@Pointcut("execution(* com.dingjn.service.impl.*.*(..))")
public void point() {
}
/**
* @param joinPoint 封装了代理对象的信息
* @return
*/
@Around(value = "point()")
public Object recordTimeLog(ProceedingJoinPoint joinPoint) throws Throwable {
Object result = null;
log.info("===== 开始执行 =====");
log.info("执行方法 : {}.{}", joinPoint.getSignature().getDeclaringType(),
joinPoint.getSignature().getName());
Object[] args = joinPoint.getArgs();
StringBuilder sb = new StringBuilder();
sb.append("|");
if (args != null) {
for (Object arg : args) {
if (arg instanceof HttpServletRequest) {
continue;
} else if (arg instanceof HttpServletResponse) {
continue;
}
sb.append(arg);
sb.append("|");
}
}
log.info("方法参数 : {}", sb.toString());
long start = System.currentTimeMillis();
result = joinPoint.proceed();
long end = System.currentTimeMillis();
long target = end - start;
if (target > 3000) {
log.error("===== 执行结束,耗时 {} 毫秒 =====", target);
} else if (target > 2000) {
log.warn("===== 执行结束,耗时 {} 毫秒 =====", target);
} else {
log.info("===== 执行结束,耗时 {} 毫秒 =====", target);
}
return result;
}
}