1,引入jarjava
<!-- springboot-aop 技術,統一處理日誌記錄--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
2,寫web日誌類web
package com.itmayiedu.aop; 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.Enumeration; @Aspect //將一個java類定義爲切面類 @Component public class WebLogAspect { public static final Logger logger= LoggerFactory.getLogger(WebLogAspect.class); /** * @Pointcut 定義一個切入點,能夠是一個規則表達式,好比下面的某個package下的全部函數,也能夠是一個註解等 */ @Pointcut("execution(public * com.itmayiedu.controller.*.*(..))") public void webLog(){ } /**根據須要在切入點開始處切入內容 * 使用@Before 在切入點開開始切入內容 * 使用Aop前置配置通知攔截請求信息 * @param joinPoint * @throws Throwable */ @Before("webLog()") public void doBefore(JoinPoint joinPoint) throws Throwable{ //接到請求,記錄請求內容 記錄最多半年數據遷移 雲備份 ServletRequestAttributes attributes= (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request=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()){ String name=enu.nextElement(); logger.info("name : {},value : {} ",name,request.getParameter(name)); } } /** * 根據須要在不一樣位置的切入內容 * @AfterReturning 在切入點return內容後切入內容(能夠用來對處理返回值作一些加工處理) * @param ret * @throws Throwable */ @AfterReturning(returning = "ret",pointcut = "webLog()") public void doAfterReturning(Object ret)throws Throwable{ //處理完成,返回內容 logger.info("RESPONSE : "+ret); } }
3,添加日誌
只是須要在resource目錄下添加 logback.xml就能夠spring
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定義日誌文件的存儲地址 勿在 LogBack 的配置中使用相對路徑--> <property name="LOG_HOME" value="./logs" /> <!-- 控制檯輸出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="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> <!-- 按照天天生成日誌文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日誌文件輸出的文件名--> <FileNamePattern>${LOG_HOME}/runtime.log.%d{yyyy-MM-dd}.log</FileNamePattern> <!--志文件保留天數--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="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> <!--日誌文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 日誌輸出級別 --> <root level="INFO"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration>