package com.mzl.flower.config;
|
|
import com.mzl.flower.config.exception.ValidationException;
|
import com.mzl.flower.utils.IpUtil;
|
import org.apache.commons.lang3.ArrayUtils;
|
import org.aspectj.lang.JoinPoint;
|
import org.aspectj.lang.ProceedingJoinPoint;
|
import org.aspectj.lang.annotation.*;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
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.io.PrintWriter;
|
import java.io.StringWriter;
|
import java.io.Writer;
|
import java.time.Instant;
|
import java.time.ZoneId;
|
import java.time.ZonedDateTime;
|
import java.time.format.DateTimeFormatter;
|
|
|
@Aspect
|
@Component
|
public class LoggingAspect {
|
private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);
|
|
@Pointcut("execution(public * com.mzl.flower.web.*.*Controller.*(..))")
|
public void controllerLoggingPointcut() {
|
}
|
|
@Before("controllerLoggingPointcut()")
|
public void logBefore(JoinPoint joinPoint) {
|
}
|
|
@AfterReturning(pointcut = "controllerLoggingPointcut()", returning = "jsonResult")
|
public void logAfter(Object jsonResult) {
|
|
}
|
|
@Around("controllerLoggingPointcut()")
|
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
|
//程序开始的时间
|
long beginTime = System.currentTimeMillis();
|
String result = "success";
|
String errorMsg = "";
|
try {
|
Object o = joinPoint.proceed();
|
return o;
|
} catch (Throwable e) {
|
if(e instanceof ValidationException){
|
result = "validate";
|
errorMsg = ((ValidationException) e).getErrorMessageKey();
|
}else{
|
result = "error";
|
final Writer writer = new StringWriter();
|
final PrintWriter print = new PrintWriter(writer);
|
e.printStackTrace(print);
|
errorMsg = e.getMessage();
|
}
|
throw e;
|
} finally {
|
//程序结束的时间
|
long endTime = System.currentTimeMillis();
|
//程序运行结束的耗时
|
long requestTime = endTime - beginTime;
|
|
// 接收到请求
|
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
HttpServletRequest request = attributes.getRequest();
|
String logReturnMsg = "{\"startTime\":\"{}\",\"endTime\":\"{}\",\"method\":\"{}\",\"api\":\"{}\"" +
|
",\"ip\":\"{}\",\"duration\":\"{}\",\"result\":\"{}\",\"errorMsg\":\"{}\"}";
|
if("success".equals(result) || "validate".equals(result)){
|
logger.info(logReturnMsg, beginTime, endTime, request.getMethod(), request.getRequestURI(), IpUtil.getIpAddress(request), requestTime, result, errorMsg);
|
}else{
|
logger.error(logReturnMsg, beginTime, endTime, request.getMethod(), request.getRequestURI(), IpUtil.getIpAddress(request), requestTime, result, errorMsg);
|
}
|
}
|
}
|
}
|