From a1349f5441aec4e264e36279cb8041f319fd81b0 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Thu, 6 Aug 2015 16:39:38 -0600 Subject: [PATCH 1/5] Optionally print spans to log in json. Uses jackson ObjectMapper to log one line json between a prefix and suffix strings. fixes gh-12 --- .../cloud/sleuth/MilliSpan.java | 36 +++++++--- .../cloud/sleuth/TimelineAnnotation.java | 7 ++ .../sleuth/slf4j/JsonSlf4jSpanListener.java | 57 ++++++++++++++++ .../slf4j/SleuthSlf4jAutoConfiguration.java | 8 +++ .../slf4j/JsonSlf4jSpanListenerTests.java | 65 +++++++++++++++++++ 5 files changed, 164 insertions(+), 9 deletions(-) create mode 100644 spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/JsonSlf4jSpanListener.java create mode 100644 spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/slf4j/JsonSlf4jSpanListenerTests.java diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/MilliSpan.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/MilliSpan.java index d81da445e..11c1defa9 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/MilliSpan.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/MilliSpan.java @@ -22,30 +22,48 @@ import java.util.List; import java.util.Map; import lombok.Builder; +import lombok.Data; import lombok.Singular; -import lombok.Value; -import lombok.experimental.NonFinal; /** * @author Spencer Gibb */ -@Value +@Data @Builder public class MilliSpan implements Span { - private long begin; - @NonFinal + private final long begin; private long end = 0; - private String name; + private final String name; private final String traceId; @Singular private List parents; private final String spanId; - @NonFinal private boolean remote = false; - private Map kVAnnotations = new LinkedHashMap<>(); + private final Map kVAnnotations = new LinkedHashMap<>(); private final String processId; @Singular - private List timelineAnnotations = new ArrayList<>(); + private final List timelineAnnotations = new ArrayList<>(); + + public MilliSpan(long begin, long end, String name, String traceId, List parents, String spanId, boolean remote, String processId) { + this.begin = begin; + this.end = end; + this.name = name; + this.traceId = traceId; + this.parents = parents; + this.spanId = spanId; + this.remote = remote; + this.processId = processId; + } + + //for serialization + private MilliSpan() { + this.begin = 0; + this.name = null; + this.traceId = null; + this.parents = null; + this.spanId = null; + this.processId = null; + } @Override public synchronized void stop() { diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/TimelineAnnotation.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/TimelineAnnotation.java index 3d3e4a8a6..a7d7974a8 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/TimelineAnnotation.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/TimelineAnnotation.java @@ -17,12 +17,19 @@ package org.springframework.cloud.sleuth; import lombok.Data; +import lombok.RequiredArgsConstructor; /** * @author Spencer Gibb */ @Data +@RequiredArgsConstructor public class TimelineAnnotation { private final long time; private final String msg; + + private TimelineAnnotation() { + this.time = 0; + this.msg = null; + } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/JsonSlf4jSpanListener.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/JsonSlf4jSpanListener.java new file mode 100644 index 000000000..d0eed77c1 --- /dev/null +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/JsonSlf4jSpanListener.java @@ -0,0 +1,57 @@ +/* + * Copyright 2013-2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.sleuth.slf4j; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import lombok.Data; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; + +import org.springframework.cloud.sleuth.event.SpanStoppedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; + +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * @author Spencer Gibb + */ +@Slf4j +@Order(Ordered.LOWEST_PRECEDENCE) +@Data +public class JsonSlf4jSpanListener { + + private final String prefix; + private final String suffix; + private final ObjectMapper objectMapper = new ObjectMapper(); + + public JsonSlf4jSpanListener() { + prefix = "[span]"; + suffix = "[endspan]"; + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + @SneakyThrows + @EventListener(SpanStoppedEvent.class) + public void stop(SpanStoppedEvent event) { + log.info("{}{}{}", prefix, + objectMapper.writeValueAsString(event.getSpan()), + suffix); + } + +} diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/SleuthSlf4jAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/SleuthSlf4jAutoConfiguration.java index 31fd58e97..f3145c8a8 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/SleuthSlf4jAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/SleuthSlf4jAutoConfiguration.java @@ -18,6 +18,7 @@ package org.springframework.cloud.sleuth.slf4j; import org.slf4j.MDC; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -29,8 +30,15 @@ import org.springframework.context.annotation.Configuration; public class SleuthSlf4jAutoConfiguration { @Bean + @ConditionalOnProperty(value = "spring.cloud.sleuth.listener.slf4j.enabled", matchIfMissing = true) public Slf4jSpanListener slf4jSpanStartedListener() { return new Slf4jSpanListener(); } + @Bean + @ConditionalOnProperty("spring.cloud.sleuth.listener.json.slf4j.enabled") + public JsonSlf4jSpanListener jsonSlf4jSpanListener() { + return new JsonSlf4jSpanListener(); + } + } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/slf4j/JsonSlf4jSpanListenerTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/slf4j/JsonSlf4jSpanListenerTests.java new file mode 100644 index 000000000..1daf508b3 --- /dev/null +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/slf4j/JsonSlf4jSpanListenerTests.java @@ -0,0 +1,65 @@ +/* + * Copyright 2013-2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.sleuth.slf4j; + +import static org.junit.Assert.*; + +import org.junit.Rule; +import org.junit.Test; +import org.springframework.boot.test.OutputCapture; +import org.springframework.cloud.sleuth.MilliSpan; +import org.springframework.cloud.sleuth.Span; +import org.springframework.cloud.sleuth.event.SpanStoppedEvent; + +import java.io.IOException; + +/** + * @author Spencer Gibb + */ +public class JsonSlf4jSpanListenerTests { + @Rule + public final OutputCapture output = new OutputCapture(); + + @Test + public void jsonSpanIsOnOneLine() throws IOException { + JsonSlf4jSpanListener listener = new JsonSlf4jSpanListener(); + Span span = MilliSpan.builder() + .name("testSpan") + .spanId("spanId1") + .parent("parentId1") + .traceId("traceId1") + .begin(1) + .end(10) + .build(); + span.addKVAnnotation("myKey", "myVal"); + span.addTimelineAnnotation("myTimelineAnnotation"); + listener.stop(new SpanStoppedEvent(this, span)); + + String output = this.output.toString().trim(); + assertTrue("output doesn't container prefix", output.contains(listener.getPrefix())); + assertTrue("output doesn't container suffix", output.contains(listener.getSuffix())); + + int prefixIndex = output.indexOf(listener.getPrefix()); + int suffixIndex = output.indexOf(listener.getSuffix()); + String json = output.substring(prefixIndex + listener.getPrefix().length(), suffixIndex); + assertFalse("json contains linefeed", output.contains("\n")); + assertFalse("json contains carriage return", output.contains("\r")); + + MilliSpan read = listener.getObjectMapper().readValue(json, MilliSpan.class); + assertEquals("span not equals", read, span); + } +} From 7deb9aff7b69efea73d49006ffdd478bdb17655f Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Fri, 7 Aug 2015 11:16:15 -0600 Subject: [PATCH 2/5] Polish logging listeners. Rename slf4j package to log. Shorten enabled properties. JsonLogSpanListener only depends on Commons Logging. --- .../JsonLogSpanListener.java} | 15 +++++----- .../SleuthLogAutoConfiguration.java} | 30 ++++++++++++------- .../{slf4j => log}/Slf4jSpanListener.java | 2 +- .../main/resources/META-INF/spring.factories | 2 +- .../JsonLogSpanListenerTests.java} | 6 ++-- 5 files changed, 31 insertions(+), 24 deletions(-) rename spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/{slf4j/JsonSlf4jSpanListener.java => log/JsonLogSpanListener.java} (85%) rename spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/{slf4j/SleuthSlf4jAutoConfiguration.java => log/SleuthLogAutoConfiguration.java} (58%) rename spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/{slf4j => log}/Slf4jSpanListener.java (97%) rename spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/{slf4j/JsonSlf4jSpanListenerTests.java => log/JsonLogSpanListenerTests.java} (93%) diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/JsonSlf4jSpanListener.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/JsonLogSpanListener.java similarity index 85% rename from spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/JsonSlf4jSpanListener.java rename to spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/JsonLogSpanListener.java index d0eed77c1..efc0a32e7 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/JsonSlf4jSpanListener.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/JsonLogSpanListener.java @@ -14,33 +14,33 @@ * limitations under the License. */ -package org.springframework.cloud.sleuth.slf4j; +package org.springframework.cloud.sleuth.log; -import com.fasterxml.jackson.databind.DeserializationFeature; import lombok.Data; import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; +import lombok.extern.apachecommons.CommonsLog; import org.springframework.cloud.sleuth.event.SpanStoppedEvent; import org.springframework.context.event.EventListener; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; /** * @author Spencer Gibb */ -@Slf4j +@CommonsLog @Order(Ordered.LOWEST_PRECEDENCE) @Data -public class JsonSlf4jSpanListener { +public class JsonLogSpanListener { private final String prefix; private final String suffix; private final ObjectMapper objectMapper = new ObjectMapper(); - public JsonSlf4jSpanListener() { + public JsonLogSpanListener() { prefix = "[span]"; suffix = "[endspan]"; objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); @@ -49,8 +49,7 @@ public class JsonSlf4jSpanListener { @SneakyThrows @EventListener(SpanStoppedEvent.class) public void stop(SpanStoppedEvent event) { - log.info("{}{}{}", prefix, - objectMapper.writeValueAsString(event.getSpan()), + log.info(prefix + objectMapper.writeValueAsString(event.getSpan()) + suffix); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/SleuthSlf4jAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/SleuthLogAutoConfiguration.java similarity index 58% rename from spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/SleuthSlf4jAutoConfiguration.java rename to spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/SleuthLogAutoConfiguration.java index f3145c8a8..b4a17a3ba 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/SleuthSlf4jAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/SleuthLogAutoConfiguration.java @@ -14,8 +14,9 @@ * limitations under the License. */ -package org.springframework.cloud.sleuth.slf4j; +package org.springframework.cloud.sleuth.log; +import org.apache.commons.logging.Log; import org.slf4j.MDC; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -26,19 +27,26 @@ import org.springframework.context.annotation.Configuration; * @author Spencer Gibb */ @Configuration -@ConditionalOnClass(MDC.class) -public class SleuthSlf4jAutoConfiguration { +public class SleuthLogAutoConfiguration { - @Bean - @ConditionalOnProperty(value = "spring.cloud.sleuth.listener.slf4j.enabled", matchIfMissing = true) - public Slf4jSpanListener slf4jSpanStartedListener() { - return new Slf4jSpanListener(); + @Configuration + @ConditionalOnClass(MDC.class) + protected static class Slf4jConfiguration { + @Bean + @ConditionalOnProperty(value = "spring.cloud.sleuth.log.slf4j.enabled", matchIfMissing = true) + public Slf4jSpanListener slf4jSpanStartedListener() { + return new Slf4jSpanListener(); + } } - @Bean - @ConditionalOnProperty("spring.cloud.sleuth.listener.json.slf4j.enabled") - public JsonSlf4jSpanListener jsonSlf4jSpanListener() { - return new JsonSlf4jSpanListener(); + @Configuration + @ConditionalOnClass(Log.class) + protected static class JsonConfiguration { + @Bean + @ConditionalOnProperty("spring.cloud.sleuth.log.json.enabled") + public JsonLogSpanListener jsonSlf4jSpanListener() { + return new JsonLogSpanListener(); + } } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/Slf4jSpanListener.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/Slf4jSpanListener.java similarity index 97% rename from spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/Slf4jSpanListener.java rename to spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/Slf4jSpanListener.java index 754f4fce2..019378c85 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/slf4j/Slf4jSpanListener.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/Slf4jSpanListener.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.sleuth.slf4j; +package org.springframework.cloud.sleuth.log; import static org.springframework.cloud.sleuth.Trace.SPAN_ID_NAME; import static org.springframework.cloud.sleuth.Trace.TRACE_ID_NAME; diff --git a/spring-cloud-sleuth-core/src/main/resources/META-INF/spring.factories b/spring-cloud-sleuth-core/src/main/resources/META-INF/spring.factories index abd858dc9..00d6ba6eb 100644 --- a/spring-cloud-sleuth-core/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-sleuth-core/src/main/resources/META-INF/spring.factories @@ -1,7 +1,7 @@ # Auto Configuration org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.cloud.sleuth.autoconfig.TraceAutoConfiguration,\ -org.springframework.cloud.sleuth.slf4j.SleuthSlf4jAutoConfiguration,\ +org.springframework.cloud.sleuth.log.SleuthLogAutoConfiguration,\ org.springframework.cloud.sleuth.instrument.scheduling.TraceSchedulingAutoConfiguration,\ org.springframework.cloud.sleuth.instrument.web.TraceWebAutoConfiguration,\ org.springframework.cloud.sleuth.instrument.web.client.TraceWebClientAutoConfiguration diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/slf4j/JsonSlf4jSpanListenerTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/log/JsonLogSpanListenerTests.java similarity index 93% rename from spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/slf4j/JsonSlf4jSpanListenerTests.java rename to spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/log/JsonLogSpanListenerTests.java index 1daf508b3..969006d46 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/slf4j/JsonSlf4jSpanListenerTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/log/JsonLogSpanListenerTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.sleuth.slf4j; +package org.springframework.cloud.sleuth.log; import static org.junit.Assert.*; @@ -30,13 +30,13 @@ import java.io.IOException; /** * @author Spencer Gibb */ -public class JsonSlf4jSpanListenerTests { +public class JsonLogSpanListenerTests { @Rule public final OutputCapture output = new OutputCapture(); @Test public void jsonSpanIsOnOneLine() throws IOException { - JsonSlf4jSpanListener listener = new JsonSlf4jSpanListener(); + JsonLogSpanListener listener = new JsonLogSpanListener(); Span span = MilliSpan.builder() .name("testSpan") .spanId("spanId1") From 95f0dbed726be278424e259fa8e51474eb7e5cf4 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Fri, 7 Aug 2015 11:38:30 -0600 Subject: [PATCH 3/5] Shorten config prefix from 'spring.cloud.sleuth' to 'spring.sleuth' --- .../instrument/web/TraceWebAutoConfiguration.java | 4 ++-- .../web/client/TraceWebClientAutoConfiguration.java | 2 +- .../cloud/sleuth/log/SleuthLogAutoConfiguration.java | 4 ++-- .../cloud/sleuth/zipkin/ZipkinAutoConfiguration.java | 10 ++-------- .../sleuth/zipkin/web/ZipkinWebAutoConfiguration.java | 2 +- 5 files changed, 8 insertions(+), 14 deletions(-) diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java index 8298034ec..4d01d6fb4 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java @@ -37,14 +37,14 @@ import org.springframework.util.StringUtils; * @author Spencer Gibb */ @Configuration -@ConditionalOnProperty(value = "spring.cloud.sleuth.trace.web.enabled", matchIfMissing = true) +@ConditionalOnProperty(value = "spring.sleuth.trace.web.enabled", matchIfMissing = true) @ConditionalOnWebApplication public class TraceWebAutoConfiguration { /** * Pattern for URLs that should be skipped in tracing */ - @Value("${spring.cloud.sleuth.instrument.web.skipPattern:}") + @Value("${spring.sleuth.instrument.web.skipPattern:}") private String skipPattern; @Autowired diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceWebClientAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceWebClientAutoConfiguration.java index c96683317..6104511a1 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceWebClientAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceWebClientAutoConfiguration.java @@ -30,7 +30,7 @@ import org.springframework.web.client.RestTemplate; * @author Spencer Gibb */ @Configuration -@ConditionalOnProperty(value = "spring.cloud.sleuth.trace.web.client.enabled", matchIfMissing = true) +@ConditionalOnProperty(value = "spring.sleuth.trace.web.client.enabled", matchIfMissing = true) @ConditionalOnClass(RestTemplate.class) public class TraceWebClientAutoConfiguration { diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/SleuthLogAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/SleuthLogAutoConfiguration.java index b4a17a3ba..74c31f1a2 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/SleuthLogAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/SleuthLogAutoConfiguration.java @@ -33,7 +33,7 @@ public class SleuthLogAutoConfiguration { @ConditionalOnClass(MDC.class) protected static class Slf4jConfiguration { @Bean - @ConditionalOnProperty(value = "spring.cloud.sleuth.log.slf4j.enabled", matchIfMissing = true) + @ConditionalOnProperty(value = "spring.sleuth.log.slf4j.enabled", matchIfMissing = true) public Slf4jSpanListener slf4jSpanStartedListener() { return new Slf4jSpanListener(); } @@ -43,7 +43,7 @@ public class SleuthLogAutoConfiguration { @ConditionalOnClass(Log.class) protected static class JsonConfiguration { @Bean - @ConditionalOnProperty("spring.cloud.sleuth.log.json.enabled") + @ConditionalOnProperty("spring.sleuth.log.json.enabled") public JsonLogSpanListener jsonSlf4jSpanListener() { return new JsonLogSpanListener(); } diff --git a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/ZipkinAutoConfiguration.java b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/ZipkinAutoConfiguration.java index 7e05b81c0..c34f5cf9d 100644 --- a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/ZipkinAutoConfiguration.java +++ b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/ZipkinAutoConfiguration.java @@ -49,7 +49,7 @@ import com.google.common.base.Optional; @Configuration @EnableConfigurationProperties @ConditionalOnClass(ServerTracerConfig.class) -@ConditionalOnProperty(value = "spring.cloud.sleuth.zipkin.enabled", matchIfMissing = true) +@ConditionalOnProperty(value = "spring.sleuth.zipkin.enabled", matchIfMissing = true) @Import({ AnnotationSubmitterConfig.class, ClientTracerConfig.class, EndPointSubmitterConfig.class, ServerSpanThreadBinderConfig.class, ServerTracerConfig.class }) @@ -78,14 +78,8 @@ public class ZipkinAutoConfiguration { return new TraceFilters(traceFilters); } - // @Bean - // @ConditionalOnProperty(value = "spring.cloud.sleuth.zipkin.braveTracer.enabled", matchIfMissing = true) - // public ZipkinSpanListener zipkinTrace(ServerTracer serverTracer, ClientTracer clientTracer) { - // return new ZipkinSpanListener(serverTracer, clientTracer); - // } - @Bean - // @ConditionalOnProperty(value = "spring.cloud.sleuth.zipkin.braveTracer.enabled", havingValue = "false") + // @ConditionalOnProperty(value = "spring.sleuth.zipkin.braveTracer.enabled", havingValue = "false") public ZipkinSpanListener sleuthTracer(SpanCollector spanCollector) { return new ZipkinSpanListener(spanCollector); } diff --git a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/web/ZipkinWebAutoConfiguration.java b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/web/ZipkinWebAutoConfiguration.java index 78f5915fb..a744e6edb 100644 --- a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/web/ZipkinWebAutoConfiguration.java +++ b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin/web/ZipkinWebAutoConfiguration.java @@ -36,7 +36,7 @@ import com.github.kristofa.brave.ServerTracerConfig; @Configuration @ConditionalOnClass(ServerTracerConfig.class) @ConditionalOnWebApplication -@ConditionalOnProperty(value = "spring.cloud.sleuth.zipkin.enabled", matchIfMissing = true) +@ConditionalOnProperty(value = "spring.sleuth.zipkin.enabled", matchIfMissing = true) @AutoConfigureAfter(ZipkinAutoConfiguration.class) @AutoConfigureBefore(TraceAutoConfiguration.class) public class ZipkinWebAutoConfiguration { From 3e18af4db9ff793376b12fa4e67a00269864e3be Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Fri, 7 Aug 2015 12:13:10 -0600 Subject: [PATCH 4/5] fixed typo in test --- .../cloud/sleuth/log/JsonLogSpanListenerTests.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/log/JsonLogSpanListenerTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/log/JsonLogSpanListenerTests.java index 969006d46..14fae23cd 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/log/JsonLogSpanListenerTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/log/JsonLogSpanListenerTests.java @@ -50,8 +50,8 @@ public class JsonLogSpanListenerTests { listener.stop(new SpanStoppedEvent(this, span)); String output = this.output.toString().trim(); - assertTrue("output doesn't container prefix", output.contains(listener.getPrefix())); - assertTrue("output doesn't container suffix", output.contains(listener.getSuffix())); + assertTrue("output doesn't contain prefix", output.contains(listener.getPrefix())); + assertTrue("output doesn't contain suffix", output.contains(listener.getSuffix())); int prefixIndex = output.indexOf(listener.getPrefix()); int suffixIndex = output.indexOf(listener.getSuffix()); From 0ee5b94dbe3c65e9cc39b5ecd65ca06be694f6b5 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Fri, 7 Aug 2015 13:05:04 -0600 Subject: [PATCH 5/5] polish test --- .../cloud/sleuth/log/JsonLogSpanListenerTests.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/log/JsonLogSpanListenerTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/log/JsonLogSpanListenerTests.java index 14fae23cd..80dcfe99c 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/log/JsonLogSpanListenerTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/log/JsonLogSpanListenerTests.java @@ -24,6 +24,7 @@ import org.springframework.boot.test.OutputCapture; import org.springframework.cloud.sleuth.MilliSpan; import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.event.SpanStoppedEvent; +import org.springframework.util.StringUtils; import java.io.IOException; @@ -56,6 +57,7 @@ public class JsonLogSpanListenerTests { int prefixIndex = output.indexOf(listener.getPrefix()); int suffixIndex = output.indexOf(listener.getSuffix()); String json = output.substring(prefixIndex + listener.getPrefix().length(), suffixIndex); + assertTrue("json is empty", StringUtils.hasText(json)); assertFalse("json contains linefeed", output.contains("\n")); assertFalse("json contains carriage return", output.contains("\r"));