@ApiLog举例
注解
/**
* 操作日志注解
*
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ApiLog {
/**
* 日志描述
*
* @return {String}
*/
String value() default "日志记录";
}
切面
/**
* 操作日志使用spring event异步入库
*
*/
@Slf4j
@Aspect
public class ApiLogAspect {
@Around("@annotation(apiLog)")
public Object around(ProceedingJoinPoint point, ApiLog apiLog) throws Throwable {
//获取类名
String className = point.getTarget().getClass().getName();
//获取方法
String methodName = point.getSignature().getName();
// 发送异步日志事件
long beginTime = System.currentTimeMillis();
//执行方法
Object result = point.proceed();
//执行时长(毫秒)
long time = System.currentTimeMillis() - beginTime;
HttpServletRequest request = WebUtil.getRequest();
//获取接口调用ip
String ip = WebUtil.getIP(request);
//获取接口地址
String path = UrlUtil.getPath(request.getRequestURI());
//获取接口请求方式
String method = request.getMethod();
//获取接口请求参数
String requestContent = WebUtil.getRequestContent(request);
//记录日志
...
return result;
}
}