AspectWebLog 访问Controller时会有相关日志打印
需要引入以下包
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.6.11</version> </dependency>
主要打印 元素有
1、controller名
2、方法名
3、HTTP方法类型 post or get
4、sessionId
5、session存活时长
6、方法执行完成时间
7、ip地址
import com.google.gson.Gson; import org.apache.catalina.session.StandardSessionFacade; 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.core.annotation.Order; 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.text.SimpleDateFormat; import java.util.Date; /** * Web层日志切面 */ @Aspect @Order(5) @Component public class AspectWebLog { private Logger logger = LoggerFactory.getLogger(getClass()); SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); ThreadLocal<Long> startTime = new ThreadLocal<>(); /** * 匹配controller包及其子包下所有类的方法 * @info 2019-10-17 09:54 liuxi * */ @Pointcut("within(com.mmall.controller..*)") public void webLog() {} @Before("webLog()") public void doBefore(JoinPoint joinPoint) throws Throwable { startTime.set(System.currentTimeMillis()); // 接收到请求,记录请求内容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); // 记录下请求内容 logger.info("\n"); logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName()); logger.info("URI : " + request.getRequestURI()); logger.info("HTTP_METHOD : " + request.getMethod()); Gson gson = new Gson(); for (int i = 0; i < joinPoint.getArgs().length; i++) { if (!(joinPoint.getArgs()[i] instanceof String)) { if (joinPoint.getArgs()[i] != null && joinPoint instanceof StandardSessionFacade) { StandardSessionFacade standardSessionFacade = ((StandardSessionFacade) joinPoint.getArgs()[i]); logger.info("ARGS SessionId : " + standardSessionFacade.getId()); logger.info("ARGS MaxTime : " + standardSessionFacade.getMaxInactiveInterval()); logger.info("ARGS AccessedTime : " + s.format(new Date(standardSessionFacade.getLastAccessedTime()))); } } else { logger.info("ARGS : " + joinPoint.getArgs()[i]); } } logger.info("IP : " + request.getRemoteAddr()); } @AfterReturning(returning = "ret", pointcut = "webLog()") public void doAfterReturning(Object ret) throws Throwable { // 处理完请求,返回内容 logger.info("RESPONSE : " + ret); logger.info("SPEND TIME : " + (System.currentTimeMillis() - startTime.get())); } }
浙公网安备 33010602011771号