package com.yupaits.docs.aop; import com.yupaits.docs.common.result.Result; 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.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.util.Arrays; /** * Web日志切面 * Created by ts495 on 2017/9/9. */ @Aspect @Component public class WebLogAspect { private Logger logger = LoggerFactory.getLogger(getClass()); private ThreadLocal<Long> startTime = new ThreadLocal<>(); @Pointcut("execution(public * com.yupaits.docs.controller..*.*(..))") public void webLog() {} @Before("webLog()") public void doBefore(JoinPoint joinPoint) { startTime.set(System.currentTimeMillis()); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); logger.info("HTTP_METHOD: {}, URL: {}, IP: {}, CLASS_METHOD: {}, ARGS: {}", request.getMethod(), request.getRequestURL().toString(), request.getRemoteAddr(), joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName(), Arrays.toString(joinPoint.getArgs())); } @AfterReturning(returning = "result", pointcut = "webLog()") public void doAfterReturning(Result result) { logger.info("SPEND TIME: {}ms, RESULT: {}", (System.currentTimeMillis() - startTime.get()), result); startTime.remove(); } }