You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 02:02:08