feat: 增加日志存储功能
1. 将日志记录到文件中,按日期和大小滚动生成; 2. 记录http请求和响应信息,不记录请求体和响应体。
This commit is contained in:
parent
03803e85ba
commit
c915a629bb
|
|
@ -1,2 +1,3 @@
|
|||
target
|
||||
.idea
|
||||
logs
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#nacos.server-addr=114.132.64.230:8123
|
||||
nacos.server-addr=192.168.0.194:8848
|
||||
|
||||
|
||||
logging.config=classpath:logback-sit.xml
|
||||
|
|
@ -11,3 +11,4 @@ spring.redis.lettuce.pool.max-active=8
|
|||
spring.redis.lettuce.pool.max-idle=8
|
||||
spring.redis.lettuce.pool.min-idle=0
|
||||
|
||||
logging.config=classpath:logback-prod.xml
|
||||
|
|
@ -13,4 +13,4 @@ spring.redis.lettuce.pool.max-active=8
|
|||
spring.redis.lettuce.pool.max-idle=8
|
||||
spring.redis.lettuce.pool.min-idle=0
|
||||
|
||||
logging.level.root=DEBUG
|
||||
logging.config=classpath:logback-sit.xml
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<configuration debug="true" scan="true" scanPeriod="30 seconds">
|
||||
<!--定义日志文件的存储地址 -->
|
||||
<Property name="logDir" value="./logs" />
|
||||
<Property name="splitSize" value="50MB" />
|
||||
|
||||
<!-- 控制台日志, 控制台输出 -->
|
||||
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">
|
||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%logger:显示类名 %msg:日志消息,%n是换行符-->
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %X{traceId} [%thread] %-5level %logger{10} %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 固定窗口滚动策略的日志输出 -->
|
||||
<appender name="RollingFileAll" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>debug</level>
|
||||
</filter>
|
||||
<file>${logDir}/nflg-bom-new.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<!-- 按日期滚动,每天生成一个文件 -->
|
||||
<fileNamePattern>${logDir}/%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||
<!-- 保留15天的日志 -->
|
||||
<maxHistory>15</maxHistory>
|
||||
<!-- 启动时,是否删除旧的日志文件 -->
|
||||
<cleanHistoryOnStart>true</cleanHistoryOnStart>
|
||||
<!-- 单天单个日志最大size -->
|
||||
<maxFileSize>${splitSize}</maxFileSize>
|
||||
</rollingPolicy>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">
|
||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%logger:显示类名 %msg:日志消息,%n是换行符-->
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %X{traceId} [%thread] %-5level %logger{50} %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 忽略Nacos服务器的INFO日志 -->
|
||||
<logger name="com.alibaba.nacos" level="WARN" />
|
||||
|
||||
<!-- 日志输出级别 -->
|
||||
<root level="INFO">
|
||||
<appender-ref ref="Console" />
|
||||
<appender-ref ref="RollingFileAll" />
|
||||
</root>
|
||||
</configuration>
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<configuration debug="true" scan="true" scanPeriod="30 seconds">
|
||||
<!--定义日志文件的存储地址 -->
|
||||
<Property name="logDir" value="./logs" />
|
||||
<Property name="splitSize" value="50MB" />
|
||||
|
||||
<!-- 控制台日志, 控制台输出 -->
|
||||
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">
|
||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%logger:显示类名 %msg:日志消息,%n是换行符-->
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %X{traceId} [%thread] %-5level %logger{10} %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 固定窗口滚动策略的日志输出 -->
|
||||
<appender name="RollingFileAll" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>debug</level>
|
||||
</filter>
|
||||
<file>${logDir}/nflg-bom-new.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<!-- 按日期滚动,每天生成一个文件 -->
|
||||
<fileNamePattern>${logDir}/%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||
<!-- 保留15天的日志 -->
|
||||
<maxHistory>15</maxHistory>
|
||||
<!-- 启动时,是否删除旧的日志文件 -->
|
||||
<cleanHistoryOnStart>true</cleanHistoryOnStart>
|
||||
<!-- 单天单个日志最大size -->
|
||||
<maxFileSize>${splitSize}</maxFileSize>
|
||||
</rollingPolicy>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">
|
||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%logger:显示类名 %msg:日志消息,%n是换行符-->
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %X{traceId} [%thread] %-5level %logger{50} %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 忽略Nacos服务器的INFO日志 -->
|
||||
<logger name="com.alibaba.nacos" level="WARN" />
|
||||
|
||||
<!-- 日志输出级别 -->
|
||||
<root level="TRACE">
|
||||
<appender-ref ref="Console" />
|
||||
<appender-ref ref="RollingFileAll" />
|
||||
</root>
|
||||
</configuration>
|
||||
|
|
@ -1,11 +1,15 @@
|
|||
package com.nflg.product.base.core.config.fillter;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.slf4j.MDC;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
/**
|
||||
* 请求拦截器
|
||||
|
|
@ -16,13 +20,28 @@ import javax.servlet.http.HttpServletResponse;
|
|||
@Slf4j
|
||||
public class HttpInterceptor implements HandlerInterceptor {
|
||||
|
||||
private static final String CHARSET = StandardCharsets.UTF_8.name();
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
|
||||
response.setCharacterEncoding(CHARSET);
|
||||
String traceId = IdWorker.getIdStr();
|
||||
MDC.put("traceId", traceId);
|
||||
// String body="内容无法显示(" + request.getContentType() + ")";
|
||||
// if (request.getMethod().equalsIgnoreCase("post") && request.getContentType().contains("json") && request.getContentLength()>0){
|
||||
// InputStream inputStream = request.getInputStream();
|
||||
// BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
|
||||
// char[] chars = new char[request.getContentLength()];
|
||||
// reader.read(chars, 0, chars.length);
|
||||
// body = String.valueOf(chars);
|
||||
// }
|
||||
log.info("HttpRecord Request,url:" + request.getRequestURL() + ",method:" + request.getMethod());
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// }
|
||||
@Override
|
||||
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
|
||||
//String body = response.getContentType().contains("json") ? response.getOutputStream().toString() : "内容无法显示(" + response.getContentType() + ")";
|
||||
log.info("HttpRecord Response,url:" + request.getRequestURL() + ",status:" + response.getStatus());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue