AOP记录日志
package com.xxxxxxx.config;
import com.alibaba.fastjson.JSON;
import com.ly.traffic.ground.cxy.config.util.AopUtil;
import com.ly.traffic.ground.saas.base.helper.LoggerHelper;
import com.ly.traffic.ground.saas.util.Constants;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.context.annotation.Configuration;
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.util.Arrays;
import java.util.Objects;
@Aspect
@Configuration
public class LogAopConfig {
private LoggerHelper log = LoggerHelper.getLoggerHelper(Constants.ModuleName.OPEN_API, LogAopConfig.class.getSimpleName());
private Long startTime;
private Long endTime;
public static final String MONITOR_URL = "/monitor";
private static final ThreadLocal<Boolean> threadLocal = new ThreadLocal<>();
public LogAopConfig() {
}
@Pointcut("execution(public * com.ly.traffic.ground.cxy.api..*.*(..))")
public void webLogPointcut() {
}
@Before("webLogPointcut()")
public void doBefore(JoinPoint joinPoint) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
try {
if (request.getRequestURL().toString().contains(MONITOR_URL)){
threadLocal.set(true);
return;
}
startTime = System.currentTimeMillis();
StringBuilder sb = new StringBuilder("");
sb.append("请求Url : ").append(request.getRequestURL().toString()).append("\r\n");
sb.append("请求方式 : ").append(request.getMethod()).append("\r\n");
sb.append("请求ip : ").append(request.getRemoteAddr()).append("\r\n");
sb.append("请求方法 : ").append(joinPoint.getSignature().getDeclaringTypeName()).append(".").append(joinPoint.getSignature().getName()).append("\r\n");
String paramter = AopUtil.getString(joinPoint);
sb.append("请求参数 : ").append(paramter);
log.infoLog(sb.toString());
}catch (Exception e){
log.infoLog("doBefore print log : " + e.getMessage(), e);
}
}
@AfterReturning(returning = "ret", pointcut = "webLogPointcut()")
public void doAfterReturning(Object ret) throws Throwable {
try {
if (judge()) {
return;
}
endTime = System.currentTimeMillis();
StringBuilder sb = new StringBuilder("");
sb.append("请求耗时 : ").append((endTime - startTime)).append("\r\n");
sb.append("请求返回 : ").append(JSON.toJSONString(ret));
log.infoLog(sb.toString());
} catch (Exception e) {
log.infoLog("doAfterReturning print log : " + e.getMessage(), e);
}
}
private boolean judge() {
if (!Objects.isNull(threadLocal.get()) && threadLocal.get()) {
threadLocal.remove();
return true;
}
return false;
}
}