网关日志调整

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