USER-20240325AU\Administrator 1 rok pred
rodič
commit
5fcb529720

+ 6 - 1
zd-gateway/pom.xml

@@ -113,12 +113,17 @@
             <scope>compile</scope>
             <scope>compile</scope>
         </dependency>
         </dependency>
 
 
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.boot</groupId>-->
+<!--            <artifactId>spring-boot-starter-web</artifactId>-->
+<!--            <scope>compile</scope>-->
+<!--        </dependency>-->
+
         <dependency>
         <dependency>
             <groupId>org.apache.skywalking</groupId>
             <groupId>org.apache.skywalking</groupId>
             <artifactId>apm-toolkit-logback-1.x</artifactId>
             <artifactId>apm-toolkit-logback-1.x</artifactId>
             <version>8.3.0</version>
             <version>8.3.0</version>
         </dependency>
         </dependency>
-
     </dependencies>
     </dependencies>
 
 
     <build>
     <build>

+ 1 - 1
zd-gateway/src/main/java/com/zd/gateway/filter/AuthFilter.java

@@ -103,6 +103,6 @@ public class AuthFilter implements GlobalFilter, Ordered {
 
 
     @Override
     @Override
     public int getOrder() {
     public int getOrder() {
-        return 2;
+        return -1;
     }
     }
 }
 }

+ 7 - 6
zd-gateway/src/main/java/com/zd/gateway/filter/LogFilter.java

@@ -1,19 +1,21 @@
 package com.zd.gateway.filter;
 package com.zd.gateway.filter;
 
 
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.cloud.gateway.filter.GatewayFilter;
+import org.slf4j.MDC;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
 import org.springframework.core.Ordered;
 import org.springframework.core.Ordered;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 import org.springframework.web.server.ServerWebExchange;
 import org.springframework.web.server.ServerWebExchange;
 import reactor.core.publisher.Mono;
 import reactor.core.publisher.Mono;
 
 
 @Component
 @Component
-@Slf4j(topic = "gateway-http---")
-public class LogFilter implements GatewayFilter, Ordered {
+@Slf4j(topic = "gateway-http-body---】")
+public class RequestBodyFilter implements GlobalFilter, Ordered {
     @Override
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
         log.info("============================ Request Begin =============================");
         log.info("============================ Request Begin =============================");
+        log.info("traceId:{}", MDC.get("traceId"));
         log.info("Request path: {}", exchange.getRequest().getPath());
         log.info("Request path: {}", exchange.getRequest().getPath());
         log.info("Request query params: {}", exchange.getRequest().getQueryParams());
         log.info("Request query params: {}", exchange.getRequest().getQueryParams());
         log.info("Request headers: {}", exchange.getRequest().getHeaders());
         log.info("Request headers: {}", exchange.getRequest().getHeaders());
@@ -23,11 +25,10 @@ public class LogFilter implements GatewayFilter, Ordered {
             log.info("Response headers: {}", exchange.getResponse().getHeaders());
             log.info("Response headers: {}", exchange.getResponse().getHeaders());
             log.info("============================ Response End =============================");
             log.info("============================ Response End =============================");
         }));
         }));
-
     }
     }
 
 
     @Override
     @Override
     public int getOrder() {
     public int getOrder() {
-        return 0;
+        return -10;
     }
     }
-}
+}

+ 16 - 20
zd-gateway/src/main/java/com/zd/gateway/filter/TraceFilter.java

@@ -1,5 +1,6 @@
 package com.zd.gateway.filter;
 package com.zd.gateway.filter;
 
 
+import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
 import org.slf4j.MDC;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
@@ -14,39 +15,34 @@ import java.util.UUID;
 
 
 
 
 @Component
 @Component
+@Slf4j(topic = "【TraceFactory】")
 public class TraceFilter implements GlobalFilter, Ordered {
 public class TraceFilter implements GlobalFilter, Ordered {
 
 
     private static final String TRACE_ID_HEADER = "X-Trace-Id";
     private static final String TRACE_ID_HEADER = "X-Trace-Id";
 
 
+    private static final String TRACE_ID = "traceId";
+
+
     @Override
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
-        try {
-            ServerHttpRequest request = exchange.getRequest();
-            String traceId = getTraceIdFromHeader(request);
-            if (traceId == null || traceId.isEmpty()) {
-                traceId = generateTraceId();
-            }
-            MDC.put("traceId", traceId);
-            return chain.filter(exchange).then();
-        } finally {
-            MDC.remove("traceId");
+        String traceId = exchange.getRequest().getHeaders().getFirst(TRACE_ID_HEADER);
+        if (traceId == null || traceId.isEmpty()) {
+            traceId = generateTraceId();
+            ServerHttpRequest mutatedRequest = exchange.getRequest().mutate()
+                    .header(TRACE_ID_HEADER, traceId)
+                    .build();
+            exchange = exchange.mutate().request(mutatedRequest).build();
         }
         }
-
-    }
-
-
-
-    private String getTraceIdFromHeader(ServerHttpRequest request) {
-        // 从请求头中获取 traceId,可以根据实际情况自定义
-        return request.getHeaders().getFirst(TRACE_ID_HEADER);
+        MDC.put(TRACE_ID, traceId);
+        log.info("Generated traceId: {}", traceId);
+        return chain.filter(exchange).doFinally(signalType -> MDC.remove(TRACE_ID));
     }
     }
 
 
     private String generateTraceId() {
     private String generateTraceId() {
-        // 生成一个新的 traceId,这里使用 UUID 作为示例
         return UUID.randomUUID().toString();
         return UUID.randomUUID().toString();
     }
     }
     @Override
     @Override
     public int getOrder() {
     public int getOrder() {
-        return 1;
+        return -200;
     }
     }
 }
 }

+ 3 - 3
zd-gateway/src/main/resources/logback.xml

@@ -5,12 +5,12 @@
 	<include
 	<include
 		resource="org/springframework/boot/logging/logback/defaults.xml" />
 		resource="org/springframework/boot/logging/logback/defaults.xml" />
 
 
-<!--	<property name="LOG_HOME" value="/data-disk/zd_service/zd-logs/${project.artifactId}" />-->
-	<property name="LOG_HOME" value="zd-logs/@project.artifactId@" />
+	<property name="LOG_HOME" value="/data-disk/zd_service/zd-logs/zd-gateway" />
+<!--	<property name="LOG_HOME" value="zd-logs/zd-gateway" />-->
 	<property name="TRACE_ID" value="%X{traceId}"/>
 	<property name="TRACE_ID" value="%X{traceId}"/>
 
 
 	<property name="TRACE_LOG_PATTERN"
 	<property name="TRACE_LOG_PATTERN"
-		value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr([%mdc{traceId}]){faint} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
+		value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr([TraceId - %X{traceId}]){faint} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
 
 
 	<appender class="ch.qos.logback.core.ConsoleAppender"
 	<appender class="ch.qos.logback.core.ConsoleAppender"
 		name="STDOUT">
 		name="STDOUT">

+ 23 - 0
zd-modules/zd-modules-laboratory/pom.xml

@@ -155,6 +155,29 @@
             <version>2.0.8</version>
             <version>2.0.8</version>
             <scope>compile</scope>
             <scope>compile</scope>
         </dependency>
         </dependency>
+
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-core</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-access</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
+            <artifactId>apm-toolkit-logback-1.x</artifactId>
+            <version>8.3.0</version>
+        </dependency>
     </dependencies>
     </dependencies>
 
 
     <build>
     <build>

+ 25 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/config/TraceInterceptor.java

@@ -0,0 +1,25 @@
+package com.zd.laboratory.config;
+
+import org.slf4j.MDC;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+public class TraceInterceptor implements HandlerInterceptor {
+    private static final String TRACE_ID_HEADER = "X-Trace-Id";
+    private static final String TRACE_ID = "traceId";
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+        String traceId = request.getHeader(TRACE_ID_HEADER);
+        MDC.put(TRACE_ID, traceId);
+        return true;
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
+        MDC.remove(TRACE_ID);
+    }
+}

+ 13 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/config/WebAppConfig.java

@@ -0,0 +1,13 @@
+package com.zd.laboratory.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+
+@Configuration
+public class WebAppConfig extends WebMvcConfigurerAdapter {
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(new TraceInterceptor()).addPathPatterns("/**");
+    }
+}

+ 4 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabSafeClassifiedController.java

@@ -1,5 +1,6 @@
 package com.zd.laboratory.controller;
 package com.zd.laboratory.controller;
 
 
+import com.alibaba.fastjson.JSON;
 import com.zd.model.domain.per.PerFun;
 import com.zd.model.domain.per.PerFun;
 import com.zd.model.domain.per.PerPrefix;
 import com.zd.model.domain.per.PerPrefix;
 import com.zd.common.core.utils.ExcelUtil;
 import com.zd.common.core.utils.ExcelUtil;
@@ -13,6 +14,7 @@ import com.zd.laboratory.domain.LabSafeClassified;
 import com.zd.laboratory.service.ILabSafeClassifiedService;
 import com.zd.laboratory.service.ILabSafeClassifiedService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
@@ -27,6 +29,7 @@ import java.util.List;
  */
  */
 @RestController
 @RestController
 @Api(tags = "【安全分级】")
 @Api(tags = "【安全分级】")
+@Slf4j
 //作者手动加入 ,在接口上加作者@ApiOperationSupport(author = "XXX")
 //作者手动加入 ,在接口上加作者@ApiOperationSupport(author = "XXX")
 @RequestMapping("/classified")
 @RequestMapping("/classified")
 public class LabSafeClassifiedController extends BaseController
 public class LabSafeClassifiedController extends BaseController
@@ -55,6 +58,7 @@ public class LabSafeClassifiedController extends BaseController
     @ApiOperation(value = "查询安全分级列表")
     @ApiOperation(value = "查询安全分级列表")
     public ResultData<List<LabSafeClassified>> listAll(LabSafeClassified labSafeClassified) {
     public ResultData<List<LabSafeClassified>> listAll(LabSafeClassified labSafeClassified) {
         List<LabSafeClassified> list = labSafeClassifiedService.selectLabSafeClassifiedNoAuthList(labSafeClassified);
         List<LabSafeClassified> list = labSafeClassifiedService.selectLabSafeClassifiedNoAuthList(labSafeClassified);
+        log.info("listAll success,data:{}", JSON.toJSONString(list));
         return ResultData.success(list);
         return ResultData.success(list);
     }
     }
 
 

+ 14 - 0
zd-modules/zd-modules-laboratory/src/main/resources/bootstrap.yml

@@ -27,3 +27,17 @@ mybatis-plus:
 #  configuration:
 #  configuration:
 #    cache-enabled: false
 #    cache-enabled: false
 #    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 #    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+
+## 日志配置
+logging:
+  level:
+    org:
+      springframework:
+        cloud: WARN
+        security: WARN
+        web: WARN
+      apache:
+        http: WARN
+    com:
+      zd:
+        gateway: INFO

+ 132 - 0
zd-modules/zd-modules-laboratory/src/main/resources/logback.xml

@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="30 seconds">
+	<jmxConfigurator />
+
+	<include
+		resource="org/springframework/boot/logging/logback/defaults.xml" />
+
+	<property name="LOG_HOME" value="/data-disk/zd_service/zd-logs/zd-modules-laboratory" />
+<!--	<property name="LOG_HOME" value="zd-logs/zd-modules-laboratory" />-->
+	<property name="TRACE_ID" value="%X{traceId}"/>
+
+	<property name="TRACE_LOG_PATTERN"
+		value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr([TraceId - %X{traceId}]){faint} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
+
+	<appender class="ch.qos.logback.core.ConsoleAppender"
+		name="STDOUT">
+		<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+			<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
+				<pattern>${TRACE_LOG_PATTERN}</pattern>
+			</layout>
+		</encoder>
+	</appender>
+
+	<appender
+		class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILE">
+		<file>${LOG_HOME}/spring-boot.log</file>
+		<rollingPolicy
+			class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
+			<maxFileSize>256MB</maxFileSize>
+			<maxHistory>30</maxHistory>
+			<!-- 日志总保存量为30GB -->
+			<totalSizeCap>30GB</totalSizeCap>
+			<timeBasedFileNamingAndTriggeringPolicy
+				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<!--文件达到 最大128MB时会被压缩和切割 -->
+				<maxFileSize>256MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+		</rollingPolicy>
+		<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+			<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
+				<pattern>${TRACE_LOG_PATTERN}</pattern>
+			</layout>
+		</encoder>
+	</appender>
+
+	<appender class="ch.qos.logback.classic.AsyncAppender"
+		name="FILE_ASYNC">
+		<discardingThreshold>0</discardingThreshold>
+		<queueSize>512</queueSize>
+		<appender-ref ref="FILE" />
+	</appender>
+
+	<appender
+		class="ch.qos.logback.core.rolling.RollingFileAppender"
+		name="ERROR_FILE">
+		<file>${LOG_HOME}/error.log</file>
+		<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+			<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
+				<pattern>${TRACE_LOG_PATTERN}</pattern>
+			</layout>
+		</encoder>
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>ERROR</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+		<rollingPolicy
+			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${LOG_HOME}/error.log.%d{yyyy-MM-dd'.log'}
+			</fileNamePattern>
+			<maxHistory>30</maxHistory>
+		</rollingPolicy>
+	</appender>
+
+	<appender
+		class="ch.qos.logback.core.rolling.RollingFileAppender"
+		name="SLOW_SQL_FILE">
+		<file>${LOG_HOME}/sql.slow.log</file>
+		<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+			<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
+				<pattern>${TRACE_LOG_PATTERN}</pattern>
+			</layout>
+		</encoder>
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>WARN</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+		<rollingPolicy
+			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${LOG_HOME}/sql.slow.log.%d{yyyy-MM-dd'.log'}
+			</fileNamePattern>
+			<maxHistory>30</maxHistory>
+		</rollingPolicy>
+	</appender>
+
+	<appender
+		class="ch.qos.logback.core.rolling.RollingFileAppender"
+		name="ERROR_SQL_FILE">
+		<file>${LOG_HOME}/sql.exception.log</file>
+		<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+			<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
+				<pattern>${TRACE_LOG_PATTERN}</pattern>
+			</layout>
+		</encoder>
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>ERROR</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+		<rollingPolicy
+			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${LOG_HOME}/sql.exception.log.%d{yyyy-MM-dd'.log'}
+			</fileNamePattern>
+			<maxHistory>30</maxHistory>
+		</rollingPolicy>
+	</appender>
+
+	<logger additivity="false" level="WARN"
+		name="com.tudou.potato.core.mybatis.interceptor.SqlLogInterceptor">
+		<appender-ref ref="SLOW_SQL_FILE" />
+		<appender-ref ref="ERROR_SQL_FILE" />
+	</logger>
+
+	<root level="INFO">
+		<appender-ref ref="STDOUT" />
+		<appender-ref ref="FILE_ASYNC" />
+		<appender-ref ref="ERROR_FILE" />
+	</root>
+
+</configuration>