From 97e47589d9d8a68c36cd79546d041eeb9457ce25 Mon Sep 17 00:00:00 2001 From: yangyang01000846 <15195822163@163.com> Date: Fri, 28 Nov 2025 13:11:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E7=BD=91=E5=85=B3?= =?UTF-8?q?=E5=A0=86=E5=A4=96=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../filter/RequestResponseLoggingFilter.java | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/gateway2/src/main/java/com/sdm/gateway2/filter/RequestResponseLoggingFilter.java b/gateway2/src/main/java/com/sdm/gateway2/filter/RequestResponseLoggingFilter.java index b6173fc6..bbd5d4e5 100644 --- a/gateway2/src/main/java/com/sdm/gateway2/filter/RequestResponseLoggingFilter.java +++ b/gateway2/src/main/java/com/sdm/gateway2/filter/RequestResponseLoggingFilter.java @@ -33,7 +33,7 @@ public class RequestResponseLoggingFilter implements GlobalFilter, Ordered { public static final String TRACE_ID_HEADER = "X-Trace-Id"; /** 最大记录的响应体长度(防止大 JSON) */ - private static final int MAX_BODY_LENGTH = 10 * 1024; + private static final int MAX_BODY_LENGTH = 100 * 1024; @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { @@ -123,23 +123,25 @@ public class RequestResponseLoggingFilter implements GlobalFilter, Ordered { if (!(body instanceof Flux)) { return super.writeWith(body); } + Flux fluxBody = (Flux) body; + return DataBufferUtils.join(fluxBody) .flatMap(joinedBuffer -> { - byte[] content = null; try { - int length = Math.min( - joinedBuffer.readableByteCount(), - MAX_BODY_LENGTH - ); - content = new byte[length]; - joinedBuffer.read(content); + // 先复制完整内容(不会影响 readerIndex) + byte[] fullBytes = new byte[joinedBuffer.readableByteCount()]; + joinedBuffer.read(fullBytes); - logResponse(exchange, traceId, startTime, content); - // 必须返回完整响应内容给客户端 - DataBuffer newBuffer = bufferFactory.wrap( - joinedBuffer.asByteBuffer() - ); + // 日志只截断读取 + int logLength = Math.min(fullBytes.length, MAX_BODY_LENGTH); + byte[] logBytes = new byte[logLength]; + System.arraycopy(fullBytes, 0, logBytes, 0, logLength); + + logResponse(exchange, traceId, startTime, logBytes); + + // 用完整数据返回客户端 + DataBuffer newBuffer = bufferFactory.wrap(fullBytes); return super.writeWith(Mono.just(newBuffer)); } finally { DataBufferUtils.release(joinedBuffer);