From d4a73e1cf608f1fbb25bb9172ca4e5c8c835b7f6 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Sat, 8 Feb 2025 16:42:28 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BD=91=E5=85=B3=E6=9C=8D=E5=8A=A1=EF=BC=9A?= =?UTF-8?q?=E7=BD=91=E5=85=B3accesslog=E8=BE=93=E5=87=BA=E6=97=A5=E5=BF=97?= =?UTF-8?q?requestBody=E9=99=90=E5=88=B610Mb=EF=BC=8C=E8=B6=85=E8=BF=87?= =?UTF-8?q?=E4=B8=8D=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../filter/logging/AccessLogFilter.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/cf-gateway/src/main/java/com/cf/imes/gateway/filter/logging/AccessLogFilter.java b/cf-gateway/src/main/java/com/cf/imes/gateway/filter/logging/AccessLogFilter.java index ddc5a254e..ea852ebbe 100644 --- a/cf-gateway/src/main/java/com/cf/imes/gateway/filter/logging/AccessLogFilter.java +++ b/cf-gateway/src/main/java/com/cf/imes/gateway/filter/logging/AccessLogFilter.java @@ -59,6 +59,11 @@ import static cn.hutool.core.date.DatePattern.NORM_DATETIME_MS_FORMATTER; @Component public class AccessLogFilter implements GlobalFilter, Ordered { + /** + * 记录的requestBody最大值 + */ + public static final int REQUEST_BODY_MAX_SIZE = 1024 * 1024 * 10; + @Resource private CodecConfigurer codecConfigurer; @@ -220,9 +225,7 @@ public class AccessLogFilter implements GlobalFilter, Ordered { Flux fluxBody = Flux.from(body); return super.writeWith(fluxBody.buffer().map(dataBuffers -> { // 设置 response body 到网关日志 - byte[] content = readContent(dataBuffers); - String responseResult = new String(content, StandardCharsets.UTF_8); - gatewayLog.setResponseBody(responseResult); + byte[] content = readContent(dataBuffers, gatewayLog); // 响应 return bufferFactory.wrap(content); @@ -272,14 +275,21 @@ public class AccessLogFilter implements GlobalFilter, Ordered { // ========== 参考 ModifyResponseBodyGatewayFilterFactory 中的方法 ========== - private byte[] readContent(List dataBuffers) { + private byte[] readContent(List dataBuffers, AccessLog gatewayLog) { // 合并多个流集合,解决返回体分段传输 DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); DataBuffer join = dataBufferFactory.join(dataBuffers); - byte[] content = new byte[join.readableByteCount()]; + int readableByteCount = join.readableByteCount(); + byte[] content = new byte[readableByteCount]; join.read(content); // 释放掉内存 DataBufferUtils.release(join); + + // 超过10Mb的requestBody不做记录 + if (REQUEST_BODY_MAX_SIZE >= readableByteCount) { + String responseResult = new String(content, StandardCharsets.UTF_8); + gatewayLog.setResponseBody(responseResult); + } return content; }