import com.alibaba.fastjson.JSON;
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 org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.Arrays;
@Aspect
@Configuration
public class LogAopConfig {
private LoggerHelper log = LoggerHelper.getLoggerHelper(Constants.ModuleName.RESOURCE_MANAGER, LogAopConfig.class.getSimpleName());
private Long startTime;
private Long endTime;
public LogAopConfig() {
}
@Pointcut("execution(public * com.ly.traffic.ground.buspass.controller..*.*(..))")
public void webLogPointcut() {
}
@Before("webLogPointcut()")
public void doBefore(JoinPoint joinPoint) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
startTime = System.currentTimeMillis();
StringBuilder sb = new StringBuilder("");
sb.append("请求开始时间:").append(LocalDateTime.now().toString()).append("\r\n");
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 = getString(joinPoint);
sb.append("请求参数 : ").append(paramter);
log.infoLog(sb.toString());
}
private String getString(JoinPoint joinPoint) {
Object[] args = joinPoint.getArgs();
Object[] arguments = new Object[args.length];
for (int i = 0; i < args.length; i++) {
if (args[i] instanceof ServletRequest || args[i] instanceof ServletResponse || args[i] instanceof MultipartFile) {
continue;
}
arguments[i] = args[i];
}
String paramter = "";
if (arguments != null) {
try {
paramter = JSON.toJSONString(arguments);
} catch (Exception e) {
paramter = arguments.toString();
}
}
return paramter;
}
@AfterReturning(returning = "ret", pointcut = "webLogPointcut()")
public void doAfterReturning(Object ret) throws Throwable {
endTime = System.currentTimeMillis();
StringBuilder sb = new StringBuilder("");
sb.append("请求结束时间:").append(LocalDateTime.now()).append("\r\n");
sb.append("请求耗时 : ").append((endTime - startTime)).append("\r\n");
sb.append("请求返回 : ").append(JSON.toJSONString(ret));
log.infoLog(sb.toString());
}
@AfterThrowing(value = "webLogPointcut()", throwing = "throwable")
public void doAfterThrowing(Throwable throwable) {
StringBuilder sb = new StringBuilder("");
sb.append("发生异常时间:").append(LocalDateTime.now()).append("\r\n");
sb.append("抛出异常 : ").append( throwable.getMessage());
log.infoLog(sb.toString());
}
}