From 64f24a5edfdfc191b665824a7c3c685787b04c34 Mon Sep 17 00:00:00 2001 From: Tim Ysewyn Date: Sun, 13 Jan 2019 17:00:01 +0100 Subject: [PATCH] Added support for multiple span reporters --- .../sleuth/autoconfig/TraceAutoConfiguration.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfiguration.java index 861719e27..b7d26bb4e 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfiguration.java @@ -62,6 +62,9 @@ public class TraceAutoConfiguration { */ public static final String TRACER_BEAN_NAME = "tracer"; + @Autowired(required = false) + List> spanReporters = new ArrayList<>(); + @Autowired(required = false) List spanAdjusters = new ArrayList<>(); @@ -80,12 +83,11 @@ public class TraceAutoConfiguration { Tracing tracing( @Value("${spring.zipkin.service.name:${spring.application.name:default}}") String serviceName, Propagation.Factory factory, CurrentTraceContext currentTraceContext, - Reporter reporter, Sampler sampler, ErrorParser errorParser, - SleuthProperties sleuthProperties) { + Sampler sampler, ErrorParser errorParser, SleuthProperties sleuthProperties) { Tracing.Builder builder = Tracing.newBuilder().sampler(sampler) .errorParser(errorParser).localServiceName(serviceName) .propagationFactory(factory).currentTraceContext(currentTraceContext) - .spanReporter(adjustedReporter(reporter)) + .spanReporter(compositeReporter()) .traceId128Bit(sleuthProperties.isTraceId128()) .supportsJoin(sleuthProperties.isSupportsJoin()); for (FinishedSpanHandler finishedSpanHandlerFactory : this.finishedSpanHandlers) { @@ -94,13 +96,15 @@ public class TraceAutoConfiguration { return builder.build(); } - private Reporter adjustedReporter(Reporter delegate) { + private Reporter compositeReporter() { return (span) -> { Span spanToAdjust = span; for (SpanAdjuster spanAdjuster : this.spanAdjusters) { spanToAdjust = spanAdjuster.adjust(spanToAdjust); } - delegate.report(spanToAdjust); + for (Reporter spanReporter : this.spanReporters) { + spanReporter.report(spanToAdjust); + } }; }