如何通过@SpanTag注解从DTO对象提取字段作为Span标签值?
解决方案
方案1:手动操作当前Span
直接在方法内通过Tracer获取活跃Span,手动添加目标标签,无需额外参数或Bean:
import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.annotation.NewSpan; import org.springframework.beans.factory.annotation.Autowired; // 注入Tracer实例 @Autowired private Tracer tracer; @NewSpan public void validateUser(UserDto userDto) { // 给当前Span添加userName标签 tracer.currentSpan().tag("userName", userDto.getName()); // 你的业务逻辑代码 }
方案2:利用SpEL表达式(Sleuth 2.2+版本支持)
如果你的Spring Cloud Sleuth版本在2.2及以上,@SpanTag支持通过SpEL表达式直接引用方法参数的属性,写法如下:
@NewSpan public void validateUser(@SpanTag(value = "userName", expression = "#userDto.name") UserDto userDto) { // 你的业务逻辑代码 }
这里#userDto对应方法参数名,name是UserDto中getName()对应的属性名(SpEL默认使用属性名而非方法名)。
以上两种方案都不需要创建额外Bean,可满足你的需求。
内容的提问来源于stack exchange,提问作者CodeNinj111
相关产品推荐
相关产品推荐

