From 6839df91ea452eba97624977563ae84c8902ebb1 Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Wed, 9 Jul 2025 02:25:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=A5=E5=BF=97=E6=89=93?= =?UTF-8?q?=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gateway/filter/LoggingGlobalFilter.java | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java b/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java index 87e9212..3b9b09e 100644 --- a/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java +++ b/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java @@ -30,17 +30,17 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered { @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { - // 创建自定义 exchange 装饰器 CustomExchange decoratedExchange = new CustomExchange(exchange); - return chain.filter(decoratedExchange) - .then(Mono.fromRunnable(() -> { + .then(Mono.defer(() -> { + // 响应完成后打印日志 log.info("🌐 请求路径: {}", exchange.getRequest().getPath()); log.info("📥 请求头: {}", exchange.getRequest().getHeaders()); log.info("📥 请求体: {}", decoratedExchange.getRequestBody()); log.info("🔚 响应状态: {}", exchange.getResponse().getStatusCode()); log.info("📤 响应内容: {}", decoratedExchange.getResponseBody()); + return Mono.empty(); })); } @@ -55,7 +55,7 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered { private static class CustomExchange extends ServerWebExchangeDecorator implements CustomExchangeInterface { private final StringBuilder requestBody = new StringBuilder(); - private StringBuilder responseBody = new StringBuilder(); + private final StringBuilder responseBody = new StringBuilder(); public CustomExchange(ServerWebExchange delegate) { super(delegate); @@ -81,23 +81,25 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered { @Override public ServerHttpResponse getResponse() { return new ServerHttpResponseDecorator(super.getResponse()) { - private final StringBuilder responseBodyBuilder = new StringBuilder(); - @Override public Mono writeWith(Publisher body) { if (body instanceof Flux) { - return super.writeWith(Flux.from(body).doOnNext(this::cacheResponseData)); + Flux fluxBody = Flux.from(body); + return super.writeWith(fluxBody + .doOnNext(buffer -> { + byte[] content = new byte[buffer.readableByteCount()]; + buffer.read(content); + String responseStr = new String(content, StandardCharsets.UTF_8); + responseBody.append(responseStr); + DataBufferUtils.release(buffer); + }) + .doOnComplete(() -> { + // 响应流完成后再赋值,确保完整性 + log.debug("✅ 完整响应内容: {}", responseBody.toString()); + })); } return super.writeWith(body); } - - private void cacheResponseData(DataBuffer buffer) { - byte[] content = new byte[buffer.readableByteCount()]; - buffer.read(content); - responseBodyBuilder.append(new String(content, StandardCharsets.UTF_8)); - responseBody = responseBodyBuilder; - DataBufferUtils.release(buffer); // 释放原始 buffer - } }; }