网关日志调整

This commit is contained in:
2025-09-08 17:29:32 +08:00
parent ee7556f706
commit bb92857db9

View File

@ -20,6 +20,7 @@ import org.springframework.web.server.ServerWebExchangeDecorator;
import reactor.core.publisher.Flux; import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.UUID; import java.util.UUID;
@ -64,7 +65,8 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered {
private static class CustomExchange extends ServerWebExchangeDecorator implements CustomExchangeInterface { private static class CustomExchange extends ServerWebExchangeDecorator implements CustomExchangeInterface {
private final StringBuilder requestBody = new StringBuilder(); private final StringBuilder requestBody = new StringBuilder();
private String responseBody; private final StringBuilder responseBodyBuilder = new StringBuilder();
public CustomExchange(ServerWebExchange delegate) { public CustomExchange(ServerWebExchange delegate) {
@ -88,25 +90,24 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered {
}; };
} }
@Override @Override
public ServerHttpResponse getResponse() { public ServerHttpResponse getResponse() {
return new ServerHttpResponseDecorator(super.getResponse()) { ServerHttpResponse originalResponse = super.getResponse();
private final StringBuilder responseBodyBuilder = new StringBuilder(); DataBufferFactory bufferFactory = originalResponse.bufferFactory();
return new ServerHttpResponseDecorator(originalResponse) {
@Override @Override
public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) { public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
if (body instanceof Flux) { if (body instanceof Flux) {
return super.writeWith(Flux.from(body) Flux<? extends DataBuffer> flux = (Flux<? extends DataBuffer>) body;
.doOnNext(buffer -> { return super.writeWith(flux.doOnNext(dataBuffer -> {
DataBufferUtils.join(Flux.just(buffer)) byte[] bytes = new byte[dataBuffer.readableByteCount()];
.map(dataBuffer -> { dataBuffer.read(bytes);
byte[] content = new byte[dataBuffer.readableByteCount()]; String bodyContent = new String(bytes, StandardCharsets.UTF_8);
dataBuffer.read(content); responseBodyBuilder.append(bodyContent);
responseBody = new String(content, StandardCharsets.UTF_8); DataBufferUtils.release(dataBuffer);
return dataBuffer; }).map(bytes -> bufferFactory.wrap((ByteBuffer) bytes)));
})
.subscribe();
}));
} }
return super.writeWith(body); return super.writeWith(body);
} }
@ -120,7 +121,7 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered {
@Override @Override
public String getResponseBody() { public String getResponseBody() {
return responseBody; return responseBodyBuilder.toString();
} }
} }