修改日志打印

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
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 创建自定义 exchange 装饰器
CustomExchange decoratedExchange = new CustomExchange(exchange);
return chain.filter(decoratedExchange)
.then(Mono.fromRunnable(() -> {
.then(Mono.defer(() -> {
// 响应完成后打印日志
log.info("🌐 请求路径: {}", exchange.getRequest().getPath());
log.info("📥 请求头: {}", exchange.getRequest().getHeaders());
log.info("📥 请求体: {}", decoratedExchange.getRequestBody());
log.info("🔚 响应状态: {}", exchange.getResponse().getStatusCode());
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 final StringBuilder requestBody = new StringBuilder();
private StringBuilder responseBody = new StringBuilder();
private final StringBuilder responseBody = new StringBuilder();
public CustomExchange(ServerWebExchange delegate) {
super(delegate);
@ -81,23 +81,25 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered {
@Override
public ServerHttpResponse getResponse() {
return new ServerHttpResponseDecorator(super.getResponse()) {
private final StringBuilder responseBodyBuilder = new StringBuilder();
@Override
public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
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);
}
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
}
};
}