package com.melon.aop; import com.melon.utils.GSON; import lombok.extern.log4j.Log4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; 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 javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Created by zhiqi.shao on 2017/5/19. */ @Log4j @Aspect @Component public class WebLogAspect { ThreadLocal<Long> startTime = new ThreadLocal<>(); @Pointcut("execution(public * com.melon.web..*.*(..))") public void webLog(){} @Before("webLog()") public void doBefore(JoinPoint joinPoint) throws Throwable { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); log.info("*****request url:" + request.getRequestURL()); StringBuilder sb = new StringBuilder(); Object[] os = joinPoint.getArgs(); for (Object o : os) { if (o instanceof HttpSession ||o instanceof HttpServletResponse || o instanceof HttpServletRequest|| o instanceof Exception) { continue; } sb.append(GSON.toJson(o) + ":"); } log.info("*****request parameters:" + sb.toString()); startTime.set(System.currentTimeMillis()); // 省略日志记录内容 } @AfterReturning(returning = "ret", pointcut = "webLog()") public void doAfterReturning(Object ret) throws Throwable { // 处理完请求,返回内容 log.info("*****response contents : " + GSON.toJson(ret)); log.info("*****response time : " + (System.currentTimeMillis() - startTime.get()) + "ms"); } }