/
SpanTag.java
64 lines (56 loc) · 1.97 KB
/
SpanTag.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/**
* Copyright 2022 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
*
* https://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 io.micrometer.tracing.annotation;
import io.micrometer.common.annotation.NoOpValueResolver;
import io.micrometer.common.annotation.ValueResolver;
import java.lang.annotation.*;
/**
* There are 3 different ways to add tags to a span. All of them are controlled by the
* annotation values. Precedence is:
* <p>
* try with the {@link ValueResolver} bean if the value of the bean wasn't set, try to
* evaluate a SPEL expression if there’s no SPEL expression just return a
* {@code toString()} value of the parameter
*
* @author Christian Schwerdtfeger
* @since 1.0.0
*/
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Target(ElementType.PARAMETER)
public @interface SpanTag {
/**
* The name of the key of the tag which should be created.
* @return the tag key
*/
String value() default "";
/**
* The name of the key of the tag which should be created.
* @return the tag value
*/
String key() default "";
/**
* Execute this expression to calculate the tag value. Will be analyzed if no value of
* the {@link SpanTag#resolver()} was set.
* @return an expression
*/
String expression() default "";
/**
* Use this bean to resolve the tag value. Has the highest precedence.
* @return {@link ValueResolver} bean
*/
Class<? extends ValueResolver> resolver() default NoOpValueResolver.class;
}