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); + } }; }