Html 将跨度Id从长转换为字符串

Html 将跨度Id从长转换为字符串,html,spring,spring-boot,trace,brave,Html,Spring,Spring Boot,Trace,Brave,如何将从Span.context().spanId()检索到的Span id转换为包含64个低位十六进制编码位的字符串。Sleuth包含一个静态实用程序方法,Span.idToHex()。他们是勇敢的等价物吗Long.toHexString()是一个候选项,但我们看到了必须保留填充字符串的问题。我看到,自从Brave版本以来,有一个返回跨度ID的十六进制表示形式的 这在内部使用inHexCodec。据我所知,这是自版本4.9.0以来的最新形式。在此之前,该方法自版本4.0.0以来就存在,但形式有

如何将从
Span.context().spanId()
检索到的Span id转换为包含64个低位十六进制编码位的
字符串。Sleuth包含一个静态实用程序方法,
Span.idToHex()。他们是勇敢的等价物吗
Long.toHexString()
是一个候选项,但我们看到了必须保留填充字符串的问题。

我看到,自从Brave版本以来,有一个
返回跨度ID的十六进制表示形式的

这在内部使用in
HexCodec
。据我所知,这是自版本
4.9.0
以来的最新形式。在此之前,该方法自版本
4.0.0
以来就存在,但形式有所不同。这个方法是
public
,您可以使用它,但是要小心,因为包名提示它不是public API,我希望它在将来的版本中可能会更改

除此之外,我还查看并看到它在内部使用了
Long.toHexString()
。它没什么用了

Long.toHexString()是一个候选者,但我们看到了一些问题,我们不得不留下填充字符串

勇敢者的
spanId
是一个。十六进制表示可能是16个字符的字符串。这根绳子不需要左加衬垫。这是一个在显示值时格式化值的问题

例如:

System.out.println(String.format("%s", Long.toHexString(Long.MIN_VALUE)));
System.out.println(String.format("%s", Long.toHexString(-1L)));
System.out.println(String.format("%s", Long.toHexString(0L)));
System.out.println(String.format("%s", Long.toHexString(1L)));
System.out.println(String.format("%s", Long.toHexString(Long.MAX_VALUE)));

System.out.println(String.format("%X", Long.MIN_VALUE));
System.out.println(String.format("%X", -1L));
System.out.println(String.format("%X", 0L));
System.out.println(String.format("%X", 1L));
System.out.println(String.format("%X", Long.MAX_VALUE));
将输出以下内容:

8000000000000000
ffffffffffffffff
0
1
7fffffffffffffff

8000000000000000
FFFFFFFFFFFFFFFF
0
1
7FFFFFFFFFFFFFFF
这些是有效的十六进制值,没有填充

如果你想用零填充来表示,你可以自己做,就像你已经做的那样。我可能会这样做:

System.out.println(String.format("%016X", Long.MIN_VALUE));
System.out.println(String.format("%016X", -1L));
System.out.println(String.format("%016X", 0L));
System.out.println(String.format("%016X", 1L));
System.out.println(String.format("%016X", Long.MAX_VALUE));
这将打印:

8000000000000000
FFFFFFFFFFFFFFFF
0000000000000000
0000000000000001
7FFFFFFFFFFFFFFF

希望这有帮助

谢谢。回答得好!spanIdString()不在我正在使用的Brave 5.4.3中,但仍然是一个很好的答案!