@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Documented
public @interface AnnoAopLogs {
boolean value() default true; // 是否需要打印日志
}
// 切面
@Aspect
@Configuration
public class AopLogs {
@Pointcut("@annotation(com.wsgw.htjc.frontend.utils.AnnoAopLogs)") // 设定切点
public void pointCut(){}
// 环绕通知
@Around("pointCut()")
public Object aroundLog(ProceedingJoinPoint joinpoint) throws Throwable {
Object[] args = joinpoint.getArgs();
String param = "";
for (int i = 0; i < args.length; i++) {
if (args[i] != null) {
try {
param += JSON.toJSONString(args[i]);
} catch (Exception e) {}
}
}
// long start = System.currentTimeMillis();
Object result = null;
String classdName = joinpoint.getTarget().getClass().getSimpleName();
String methodName = joinpoint.getSignature().getName();
// 获取注解
Class<?> aClass = joinpoint.getTarget().getClass();
Class<?>[] par=((MethodSignature) joinpoint.getSignature()).getParameterTypes();
Method method = aClass.getMethod(methodName, par);
AnnoAopLogs annotation = method.getAnnotation(AnnoAopLogs.class);
boolean value = annotation.value();
Date date = new Date();
DateFormat format = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
// System.out.println("请求参数 【 " + param +" 】");
try {
if (value) {
System.out.println("================== "+ format.format(date) + "=======" + classdName + " => " + methodName + " 开始请求接口 ================");
//有返回参数 则需返回值
result = joinpoint.proceed();
long end = System.currentTimeMillis();
System.out.println("================== 请求结束【总共执行时长" + (end - date.getTime()) + " 毫秒】==========");
return result;
}
result = joinpoint.proceed();
} catch (Exception e) {}
return result;
}
}