网关日志调整
This commit is contained in:
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user