diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/annotation/SpanTag.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/annotation/SpanTag.java index 9da85d1f4..e1053b0be 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/annotation/SpanTag.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/annotation/SpanTag.java @@ -45,7 +45,6 @@ public @interface SpanTag { /** * The name of the key of the tag which should be created. */ - @AliasFor("key") String value() default ""; /** diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/annotation/SpanTagAnnotationHandler.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/annotation/SpanTagAnnotationHandler.java index e176eb106..9689045db 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/annotation/SpanTagAnnotationHandler.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/annotation/SpanTagAnnotationHandler.java @@ -121,10 +121,16 @@ class SpanTagAnnotationHandler { private void addAnnotatedArguments(List toBeAdded) { for (SleuthAnnotatedParameter container : toBeAdded) { String tagValue = resolveTagValue(container.annotation, container.argument); - tracer().addTag(container.annotation.value(), tagValue); + String tagKey = resolveTagKey(container); + tracer().addTag(tagKey, tagValue); } } + private String resolveTagKey(SleuthAnnotatedParameter container) { + return StringUtils.hasText(container.annotation.value()) ? + container.annotation.value() : container.annotation.key(); + } + String resolveTagValue(SpanTag annotation, Object argument) { if (argument == null) { return ""; diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/annotation/SleuthSpanCreatorAspectTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/annotation/SleuthSpanCreatorAspectTests.java index a5a76c4ad..537e5a192 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/annotation/SleuthSpanCreatorAspectTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/annotation/SleuthSpanCreatorAspectTests.java @@ -149,6 +149,22 @@ public class SleuthSpanCreatorAspectTests { then(ExceptionUtils.getLastException()).isNull(); } + @Test + public void shouldContinueSpanWhenKeyIsUsedOnSpanTagWhenAnnotationOnInterfaceMethod() { + Span span = this.tracer.createSpan("foo"); + + this.testBean.testMethod10_v2("test"); + + this.tracer.close(span); + List spans = new ArrayList<>(this.accumulator.getSpans()); + then(new ListOfSpans(spans)).hasSize(1) + .hasASpanWithName("foo") + .hasASpanWithTagEqualTo("customTestTag10", "test") + .hasASpanWithLogEqualTo("customTest.before") + .hasASpanWithLogEqualTo("customTest.after"); + then(ExceptionUtils.getLastException()).isNull(); + } + @Test public void shouldContinueSpanWithLogWhenAnnotationOnClassMethod() { Span span = this.tracer.createSpan("foo"); @@ -244,7 +260,10 @@ public class SleuthSpanCreatorAspectTests { void testMethod9(String param); @ContinueSpan(log = "customTest") - void testMethod10(@SpanTag("testTag10") String param); + void testMethod10(@SpanTag(value = "testTag10") String param); + + @ContinueSpan(log = "customTest") + void testMethod10_v2(@SpanTag(key = "testTag10") String param); // tag::continue_span[] @ContinueSpan(log = "testMethod11") @@ -306,7 +325,12 @@ public class SleuthSpanCreatorAspectTests { } @Override - public void testMethod10(@SpanTag("customTestTag10") String param) { + public void testMethod10(@SpanTag(value = "customTestTag10") String param) { + + } + + @Override + public void testMethod10_v2(@SpanTag(key = "customTestTag10") String param) { }