あなたは簡単にそれはあなたがWebClient.Builder
を使用してWebClient
を作成するときにだけカスタムlogRequest
フィルタを追加しExchangeFilterFunction
を使用して行うことができます。
このようなフィルタの例と、それをWebClient
に追加する方法を示します。
@Slf4j
@Component
public class MyClient {
private final WebClient webClient;
// Create WebClient instance using builder.
// If you use spring-boot 2.0, the builder will be autoconfigured for you
// with the "prototype" scope, meaning each injection point will receive
// a newly cloned instance of the builder.
public MyClient(WebClient.Builder webClientBuilder) {
webClient = webClientBuilder // you can also just use WebClient.builder()
.baseUrl("https://httpbin.org")
.filter(logRequest()) // here is the magic
.build();
}
// Just example of sending request
public void send(String path) {
ClientResponse clientResponse = webClient
.get().uri(uriBuilder -> uriBuilder.path(path)
.queryParam("param", "value")
.build())
.exchange()
.block();
log.info("Response: {}", clientResponse.toEntity(String.class).block());
}
// This method returns filter function which will log request data
private static ExchangeFilterFunction logRequest() {
return ExchangeFilterFunction.ofRequestProcessor(clientRequest -> {
log.info("Request: {} {}", clientRequest.method(), clientRequest.url());
clientRequest.headers().forEach((name, values) -> values.forEach(value -> log.info("{}={}", name, value)));
return Mono.just(clientRequest);
});
}
}
myClient.send("get");
としてください。ログメッセージがあるはずです。
出力例:
Request: GET https://httpbin.org/get?param=value
header1=value1
header2=value2
あなたが今持っているコードを共有できますか? –
@BrianClozelはこちらです – Seb
ありがとう!あなたはログに記録したいものの例も与えられますか?リクエストURI? –