2020-02-01

26,Spring Boot中使用AOP統(tǒng)一處理Web請(qǐng)求日志


1,引入jar

<!-- springboot-aop 技術(shù),統(tǒng)一處理日志記錄--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>

2,寫(xiě)web日志類(lèi)

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//將一個(gè)java類(lèi)定義為切面類(lèi)@ComponentpublicclassWebLogAspect{publicstaticfinalLoggerlogger=LoggerFactory.getLogger(WebLogAspect.class);/**

? ? * @Pointcut? 定義一個(gè)切入點(diǎn),可以是一個(gè)規(guī)則表達(dá)式,比如下面的某個(gè)package下的所有函數(shù),也可以是一個(gè)注解等

? ? */@Pointcut("execution(public * com.nvli.chapter10.controller.*.*(..))")publicvoidwebLog(){}/**根據(jù)需要在切入點(diǎn)開(kāi)始處切入內(nèi)容

? ? * 使用@Before 在切入點(diǎn)開(kāi)開(kāi)始切入內(nèi)容

? ? * 使用Aop前置配置通知攔截請(qǐng)求信息

? ? * @param joinPoint

? ? * @throws Throwable

? ? */@Before("webLog()")publicvoiddoBefore(JoinPointjoinPoint)throwsThrowable{//接到請(qǐng)求,記錄請(qǐng)求內(nèi)容ServletRequestAttributesattributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();HttpServletRequestrequest=attributes.getRequest();//記錄下日志請(qǐng)求內(nèi)容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));}}/**

? ? * 根據(jù)需要在不同位置的切入內(nèi)容

? ? * @AfterReturning 在切入點(diǎn)return內(nèi)容后切入內(nèi)容(可以用來(lái)對(duì)處理返回值做一些加工處理)

? ? * @param ret

? ? * @throws Throwable

? ? */@AfterReturning(returning="ret",pointcut="webLog()")publicvoiddoAfterReturning(Objectret)throwsThrowable{//處理完成,返回內(nèi)容logger.info("RESPONSE : "+ret);}}

3,添加日志

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

<?xml version="1.0" encoding="UTF-8"?><configurationdebug="false"><!--定義日志文件的存儲(chǔ)地址 勿在 LogBack 的配置中使用相對(duì)路徑--><propertyname="LOG_HOME"value="./logs"/><!-- 控制臺(tái)輸出 --><appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender"><encoderclass="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化輸出:%d表示日期,%thread表示線(xiàn)程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%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><!--志文件保留天數(shù)--><MaxHistory>30</MaxHistory></rollingPolicy><encoderclass="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化輸出:%d表示日期,%thread表示線(xiàn)程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%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><!-- 日志輸出級(jí)別 --><rootlevel="INFO"><appender-refref="STDOUT"/><appender-refref="FILE"/></root></configuration>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容