修改日志打印

This commit is contained in:
2025-07-09 01:58:33 +08:00
parent 09d5667f71
commit 15de2a52de

View File

@ -27,71 +27,18 @@ import java.nio.charset.StandardCharsets;
@Slf4j
@Component
public class LoggingGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 创建一个同时装饰 request 和 response 的 exchange
ServerWebExchange decoratedExchange = new ServerWebExchangeDecorator(exchange) {
private final StringBuilder requestBody = new StringBuilder();
private final StringBuilder responseBody = new StringBuilder();
@Override
public ServerHttpRequest getRequest() {
return new ServerHttpRequestDecorator(super.getRequest()) {
@Override
public Flux<DataBuffer> getBody() {
return super.getBody().map(buffer -> {
byte[] bytes = new byte[buffer.readableByteCount()];
buffer.read(bytes);
String chunk = new String(bytes, StandardCharsets.UTF_8);
requestBody.append(chunk);
DataBufferUtils.release(buffer);
return buffer.factory().wrap(bytes);
});
}
};
}
@Override
public ServerHttpResponse getResponse() {
return new ServerHttpResponseDecorator(super.getResponse()) {
@Override
public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
if (body instanceof Flux) {
Flux<? extends DataBuffer> fluxBody = (Flux<? extends DataBuffer>) body;
return super.writeWith(fluxBody.map(buffer -> {
byte[] content = new byte[buffer.readableByteCount()];
buffer.read(content);
DataBufferUtils.release(buffer);
String responseStr = new String(content, StandardCharsets.UTF_8);
responseBody.append(responseStr);
return buffer.factory().wrap(content);
}));
}
return super.writeWith(body);
}
};
}
public String getRequestBody() {
return requestBody.toString();
}
public String getResponseBody() {
return responseBody.toString();
}
};
// 创建自定义 exchange 装饰器
CustomExchange decoratedExchange = new CustomExchange(exchange);
return chain.filter(decoratedExchange)
.then(Mono.fromRunnable(() -> {
log.info("🌐 请求路径: {}", exchange.getRequest().getPath());
log.info("📥 请求头: {}", exchange.getRequest().getHeaders());
log.info("📥 请求体: {}", ((CustomExchange) decoratedExchange).getRequestBody());
log.info("📥 请求体: {}", decoratedExchange.getRequestBody());
log.info("🔚 响应状态: {}", exchange.getResponse().getStatusCode());
log.info("📤 响应内容: {}", ((CustomExchange) decoratedExchange).getResponseBody());
log.info("📤 响应内容: {}", decoratedExchange.getResponseBody());
}));
}
@ -100,8 +47,73 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered {
return Ordered.LOWEST_PRECEDENCE; // 最后执行
}
// 自定义接口用于获取 body 内容
private interface CustomExchange extends ServerWebExchange {
/**
* 自定义装饰器,实现 ServerWebExchange 并扩展 body 记录功能
*/
private static class CustomExchange extends ServerWebExchangeDecorator implements CustomExchangeInterface {
private final StringBuilder requestBody = new StringBuilder();
private final StringBuilder responseBody = new StringBuilder();
public CustomExchange(ServerWebExchange delegate) {
super(delegate);
}
@Override
public ServerHttpRequest getRequest() {
return new ServerHttpRequestDecorator(super.getRequest()) {
@Override
public Flux<DataBuffer> getBody() {
return super.getBody().map(buffer -> {
byte[] bytes = new byte[buffer.readableByteCount()];
buffer.read(bytes);
String chunk = new String(bytes, StandardCharsets.UTF_8);
requestBody.append(chunk);
DataBufferUtils.release(buffer);
return buffer.factory().wrap(bytes);
});
}
};
}
@Override
public ServerHttpResponse getResponse() {
return new ServerHttpResponseDecorator(super.getResponse()) {
@Override
public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
if (body instanceof Flux) {
Flux<? extends DataBuffer> fluxBody = (Flux<? extends DataBuffer>) body;
return super.writeWith(fluxBody.map(buffer -> {
byte[] content = new byte[buffer.readableByteCount()];
buffer.read(content);
DataBufferUtils.release(buffer);
String responseStr = new String(content, StandardCharsets.UTF_8);
responseBody.append(responseStr);
return buffer.factory().wrap(content);
}));
}
return super.writeWith(body);
}
};
}
@Override
public String getRequestBody() {
return requestBody.toString();
}
@Override
public String getResponseBody() {
return responseBody.toString();
}
}
/**
* 扩展接口,提供获取 body 的方法
*/
private interface CustomExchangeInterface extends ServerWebExchange {
String getRequestBody();
String getResponseBody();
}