修改日志打印
This commit is contained in:
@ -30,17 +30,17 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
||||||
// 创建自定义 exchange 装饰器
|
|
||||||
CustomExchange decoratedExchange = new CustomExchange(exchange);
|
CustomExchange decoratedExchange = new CustomExchange(exchange);
|
||||||
|
|
||||||
|
|
||||||
return chain.filter(decoratedExchange)
|
return chain.filter(decoratedExchange)
|
||||||
.then(Mono.fromRunnable(() -> {
|
.then(Mono.defer(() -> {
|
||||||
|
// 响应完成后打印日志
|
||||||
log.info("🌐 请求路径: {}", exchange.getRequest().getPath());
|
log.info("🌐 请求路径: {}", exchange.getRequest().getPath());
|
||||||
log.info("📥 请求头: {}", exchange.getRequest().getHeaders());
|
log.info("📥 请求头: {}", exchange.getRequest().getHeaders());
|
||||||
log.info("📥 请求体: {}", decoratedExchange.getRequestBody());
|
log.info("📥 请求体: {}", decoratedExchange.getRequestBody());
|
||||||
log.info("🔚 响应状态: {}", exchange.getResponse().getStatusCode());
|
log.info("🔚 响应状态: {}", exchange.getResponse().getStatusCode());
|
||||||
log.info("📤 响应内容: {}", decoratedExchange.getResponseBody());
|
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 static class CustomExchange extends ServerWebExchangeDecorator implements CustomExchangeInterface {
|
||||||
|
|
||||||
private final StringBuilder requestBody = new StringBuilder();
|
private final StringBuilder requestBody = new StringBuilder();
|
||||||
private StringBuilder responseBody = new StringBuilder();
|
private final StringBuilder responseBody = new StringBuilder();
|
||||||
|
|
||||||
public CustomExchange(ServerWebExchange delegate) {
|
public CustomExchange(ServerWebExchange delegate) {
|
||||||
super(delegate);
|
super(delegate);
|
||||||
@ -81,22 +81,24 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered {
|
|||||||
@Override
|
@Override
|
||||||
public ServerHttpResponse getResponse() {
|
public ServerHttpResponse getResponse() {
|
||||||
return new ServerHttpResponseDecorator(super.getResponse()) {
|
return new ServerHttpResponseDecorator(super.getResponse()) {
|
||||||
private final StringBuilder responseBodyBuilder = new StringBuilder();
|
|
||||||
|
|
||||||
@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).doOnNext(this::cacheResponseData));
|
Flux<? extends DataBuffer> fluxBody = Flux.from(body);
|
||||||
}
|
return super.writeWith(fluxBody
|
||||||
return super.writeWith(body);
|
.doOnNext(buffer -> {
|
||||||
}
|
|
||||||
|
|
||||||
private void cacheResponseData(DataBuffer buffer) {
|
|
||||||
byte[] content = new byte[buffer.readableByteCount()];
|
byte[] content = new byte[buffer.readableByteCount()];
|
||||||
buffer.read(content);
|
buffer.read(content);
|
||||||
responseBodyBuilder.append(new String(content, StandardCharsets.UTF_8));
|
String responseStr = new String(content, StandardCharsets.UTF_8);
|
||||||
responseBody = responseBodyBuilder;
|
responseBody.append(responseStr);
|
||||||
DataBufferUtils.release(buffer); // 释放原始 buffer
|
DataBufferUtils.release(buffer);
|
||||||
|
})
|
||||||
|
.doOnComplete(() -> {
|
||||||
|
// 响应流完成后再赋值,确保完整性
|
||||||
|
log.debug("✅ 完整响应内容: {}", responseBody.toString());
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
return super.writeWith(body);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user