修改日志打印

This commit is contained in:
2025-07-09 02:25:07 +08:00
parent 4c7aef86d5
commit 6839df91ea

View File

@ -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,23 +81,25 @@ 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
.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); 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
}
}; };
} }