From 6ce9a43f462b1695ac78867eae652f61778a93cb Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Wed, 13 Jul 2022 15:13:59 +0200 Subject: [PATCH] Adds information on how to add Zalando's Logbook WebFlux integration; fixes gh-1690 --- docs/src/main/asciidoc/integrations.adoc | 44 ++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/docs/src/main/asciidoc/integrations.adoc b/docs/src/main/asciidoc/integrations.adoc index 1de9403e4..9d015425d 100644 --- a/docs/src/main/asciidoc/integrations.adoc +++ b/docs/src/main/asciidoc/integrations.adoc @@ -156,6 +156,50 @@ To block this feature, set `spring.sleuth.web.client.enabled` to `false`. IMPORTANT: You have to register `WebClient` as a bean so that the tracing instrumentation gets applied. If you create a `WebClient` instance with a `new` keyword, the instrumentation does NOT work. +[[sleuht-http-client-logbook-with-webclient]] +===== Logbook with WebClient + +In order to add support for Logbook with WebClient `org.zalando:logbook-spring-boot-webflux-autoconfigure` you need to add the following configuration. You can read more about this integration in https://github.com/spring-cloud/spring-cloud-sleuth/issues/1690[this issue]. + +[source,java,indent=0] +---- +@Configuration +@Import(LogbookWebFluxAutoConfiguration.class) +public class LogbookConfiguration { + + @Bean + public LogstashLogbackSink logbackSink(final HttpLogFormatter formatter) { + return new LogstashLogbackSink(formatter); + } + + @Bean + public CorrelationId correlationId(final Tracer tracer) { + return request -> requireNonNull(requireNonNull(tracer.currentSpan())).context().traceId(); + } + + @Bean + ReactorNettyHttpTracing reactorNettyHttpTracing(final HttpTracing httpTracing) { + return ReactorNettyHttpTracing.create(httpTracing); + } + + @Bean + NettyServerCustomizer nettyServerCustomizer(final Logbook logbook, + final ReactorNettyHttpTracing reactorNettyHttpTracing) { + return server -> reactorNettyHttpTracing.decorateHttpServer( + server.doOnConnection(conn -> conn.addHandlerFirst(new LogbookServerHandler(logbook)))); + } + + @Bean + WebClient webClient(final Logbook logbook, final ReactorNettyHttpTracing reactorNettyHttpTracing) { + return WebClient.builder() + .clientConnector(new ReactorClientHttpConnector(reactorNettyHttpTracing.decorateHttpClient(HttpClient + .create().doOnConnected(conn -> conn.addHandlerLast(new LogbookClientHandler(logbook)))))) + .build(); + } + +} +---- + [[sleuth-http-client-traverson-integration]] ==== Traverson