diff --git a/config/dev/ruoyi-gateway.yml b/config/dev/ruoyi-gateway.yml index deb3fe97..4ee7cd6a 100644 --- a/config/dev/ruoyi-gateway.yml +++ b/config/dev/ruoyi-gateway.yml @@ -34,6 +34,8 @@ spring: cloud: # 网关配置 gateway: + # 打印请求日志(自定义) + requestLog: true discovery: locator: lowerCaseServiceId: true diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/CustomGatewayProperties.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/CustomGatewayProperties.java new file mode 100644 index 00000000..4b520f91 --- /dev/null +++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/CustomGatewayProperties.java @@ -0,0 +1,24 @@ +package com.ruoyi.gateway.config.properties; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +/** + * 自定义gateway参数配置 + * + * @author Lion Li + */ +@Data +@Configuration +@RefreshScope +@ConfigurationProperties(prefix = "spring.cloud.gateway") +public class CustomGatewayProperties { + + /** + * 请求日志 + */ + private Boolean requestLog; + +} diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/GlobalLogFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/GlobalLogFilter.java new file mode 100644 index 00000000..f33a83ac --- /dev/null +++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/GlobalLogFilter.java @@ -0,0 +1,120 @@ +package com.ruoyi.gateway.filter; + +import cn.hutool.core.map.MapUtil; +import com.ruoyi.common.core.utils.JsonUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.gateway.config.properties.CustomGatewayProperties; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.http.MediaType; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpRequestDecorator; +import org.springframework.stereotype.Component; +import org.springframework.util.MultiValueMap; +import org.springframework.web.server.ServerWebExchange; +import org.springframework.web.util.UriComponentsBuilder; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +import java.net.URI; +import java.nio.charset.StandardCharsets; +import java.util.LinkedHashSet; + +import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.CACHED_SERVER_HTTP_REQUEST_DECORATOR_ATTR; +import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR; + +/** + * 全局日志过滤器 + *
+ * 用于打印请求执行参数与响应时间等等
+ *
+ * @author Lion Li
+ */
+@Slf4j
+@Component
+public class GlobalLogFilter implements GlobalFilter, Ordered {
+
+ @Autowired
+ private CustomGatewayProperties customGatewayProperties;
+
+ private static final String START_TIME = "startTime";
+
+ @Override
+ public Mono