(1)首先引入依赖
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
(2)日志统一管理代码
@Aspect
@Order(1) //控制多个Aspect的执行顺序,越小越先执行
@Component
public class HttpLogAspect {
private Logger LOG = LoggerFactory.getLogger(getClass());
ThreadLocal<Long> startTime = new ThreadLocal<Long>();
@Pointcut("execution(public * com.example.demo.controller.*.*(..))")
public void httpLog() {}
@Before("httpLog()")
public void runBefore(JoinPoint joinPoint) {
startTime.set(System.currentTimeMillis());
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
LOG.info("URL : {}", request.getRequestURL()+" ["+request.getMethod()+"]");
LOG.info("IP : {}", request.getRemoteAddr());
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String nextElement = headerNames.nextElement();
LOG.info(nextElement.toUpperCase() + " : {}", request.getHeader(nextElement));
}
LOG.info("CLASS_METHOD : {}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
LOG.info("PARAM : {}", null != request.getQueryString() ? JSON.toJSONString(request.getQueryString().split("&")) : "EMPTY");
}
@AfterReturning(returning = "response", pointcut = "httpLog()")
public void runAfterReturning(Object response) {
LOG.info("RESPONSE : {}", JSON.toJSONString(response));
LOG.info("SPEND TIME : {}", (System.currentTimeMillis() - startTime.get()) + "ms");
}
}
(3)效果如下所示:
参考:https://my.oschina.net/evanNmin/blog/1797914