2020-02-01

26,Spring Boot中使用AOP统一处理Web请求日志


1,引入jar

org.springframework.bootspring-boot-starter-aop

2,写web日志类

packagecom.nvli.chapter10;importorg.aspectj.lang.JoinPoint;importorg.aspectj.lang.annotation.AfterReturning;importorg.aspectj.lang.annotation.Aspect;importorg.aspectj.lang.annotation.Before;importorg.aspectj.lang.annotation.Pointcut;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.stereotype.Component;importorg.springframework.web.context.request.RequestContextHolder;importorg.springframework.web.context.request.ServletRequestAttributes;importjavax.servlet.http.HttpServletRequest;importjava.util.Enumeration;@Aspect//将一个java类定义为切面类@ComponentpublicclassWebLogAspect{publicstaticfinalLoggerlogger=LoggerFactory.getLogger(WebLogAspect.class);/**

    * @Pointcut  定义一个切入点,可以是一个规则表达式,比如下面的某个package下的所有函数,也可以是一个注解等

    */@Pointcut("execution(public * com.nvli.chapter10.controller.*.*(..))")publicvoidwebLog(){}/**根据需要在切入点开始处切入内容

    * 使用@Before 在切入点开开始切入内容

    * 使用Aop前置配置通知拦截请求信息

    * @param joinPoint

    * @throws Throwable

    */@Before("webLog()")publicvoiddoBefore(JoinPointjoinPoint)throwsThrowable{//接到请求,记录请求内容ServletRequestAttributesattributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();HttpServletRequestrequest=attributes.getRequest();//记录下日志请求内容logger.info("URL : "+request.getRequestURL());logger.info("Http_METHOO : "+request.getMethod());logger.info("IP : "+request.getRemoteAddr());logger.info("CLASS_METHOD : "+joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());logger.info("ASK_TIME : "+System.currentTimeMillis());Enumerationenu=request.getParameterNames();while(enu.hasMoreElements()){Stringname=enu.nextElement();logger.info("name : {},value : {} ",name,request.getParameter(name));}}/**

    * 根据需要在不同位置的切入内容

    * @AfterReturning 在切入点return内容后切入内容(可以用来对处理返回值做一些加工处理)

    * @param ret

    * @throws Throwable

    */@AfterReturning(returning="ret",pointcut="webLog()")publicvoiddoAfterReturning(Objectret)throwsThrowable{//处理完成,返回内容logger.info("RESPONSE : "+ret);}}

3,添加日志

只是需要在resource目录下添加 logback.xml就可以

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg  %n${LOG_HOME}/runtime.log.%d{yyyy-MM-dd}.log30%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n10MB

你可能感兴趣的:(2020-02-01)