美文网首页
2020-02-01

2020-02-01

作者: 孙易_1292 | 来源:发表于2020-02-01 19:33 被阅读0次

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

1,引入jar

<!-- springboot-aop 技术,统一处理日志记录--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>

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());Enumeration<String>enu=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就可以

<?xml version="1.0" encoding="UTF-8"?><configurationdebug="false"><!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--><propertyname="LOG_HOME"value="./logs"/><!-- 控制台输出 --><appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender"><encoderclass="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg  %n</pattern></encoder></appender><!-- 按照每天生成日志文件 --><appendername="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件输出的文件名--><FileNamePattern>${LOG_HOME}/runtime.log.%d{yyyy-MM-dd}.log</FileNamePattern><!--志文件保留天数--><MaxHistory>30</MaxHistory></rollingPolicy><encoderclass="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder><!--日志文件最大的大小--><triggeringPolicyclass="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize></triggeringPolicy></appender><!-- 日志输出级别 --><rootlevel="INFO"><appender-refref="STDOUT"/><appender-refref="FILE"/></root></configuration>

相关文章

网友评论

      本文标题:2020-02-01

      本文链接:https://www.haomeiwen.com/subject/ikbxxhtx.html