日志输出实体
package com.log;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
@AllArgsConstructor
public class LiveLog {
// 请求路径
private String requestPath;
// 请求方法
private String requestMethod;
// 当前的时间戳
private Long currentTimeMills;
// 参数类型
private Map argsType;
// 所有入参
private List
AOP切面类
package com.log.aspect;
import com.alibaba.fastjson.JSONObject;
import com.cmb.live.log.LiveLog;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@Aspect
@Component
@Slf4j
public class LiveLogAspect {
@Pointcut(value = "execution(public * com.controller.*.*(..))") // 切点
private void controllerPointCut() {
}
@Around(value = "controllerPointCut()")
private Object Around(ProceedingJoinPoint proceedingJoinPoint) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Long startTime = System.currentTimeMillis();// 步入时间戳
MethodSignature method = (MethodSignature) proceedingJoinPoint.getSignature();
Class> currentClass = proceedingJoinPoint.getTarget().getClass();
Object proceed = null;
try {
proceed = proceedingJoinPoint.proceed();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
log.info(JSONObject.toJSONString(new LiveLog(request.getRequestURI(), request.getMethod(), startTime,
getMethodArgumentTypeName(method), Arrays.asList(proceedingJoinPoint.getArgs()), proceed.toString(),
(System.currentTimeMillis() - startTime) + "ms", currentClass.getName() + "." + method.getName(),
request.getRemoteAddr(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), method.getReturnType().getName())));
return proceed;
}
@AfterThrowing(value = "controllerPointCut()")
private void AfterThrowing() {
System.out.println("异常通知");
}
private Map getMethodArgumentTypeName(MethodSignature method) {
Map map = new HashMap<>();
String[] argTypeNames = method.getParameterNames();
Class[] parameterTypes = method.getParameterTypes();
for (int i = 0; i < parameterTypes.length; i++) {
map.put(parameterTypes[i].getName(), argTypeNames[i]);
}
return map;
}
}



