HttpContext.TraceIdentifier 和 Activity.Current.Id 之间的区别

lon*_*nix 12 c# asp.net-core

我在日志中使用“跟踪 ID”。关于 aspnet repo 和此处的建议是从HttpContext.TraceIdentifier.

但是,当框架ProblemDetails为验证失败创建时,它会使用Activity.Current?.Id.

例子:

var traceId1 = Activity.Current?.Id;        // OWZ4G27FO6UWH:00000003
var traceId2 = HttpContext.TraceIdentifier; // 00-2a8ee37903e657e3a95b41178dafc56e-91b02006afcf3133-00
Run Code Online (Sandbox Code Playgroud)

我担心我的日志使用一种类型的跟踪 ID,而框架使用另一种类型 - 当我发现自己需要分析日志时,我就会遇到问题。

这些有何不同?我应该使用哪个?该框架通常使用哪种类型?

更新

我也询问了回购协议,他们没有任何解释就关闭了它。如果您有时间,请打开一个新问题,并向我们提供链接,以便我们对您的问题进行投票。

Zhi*_* Lv 2

HttpContext.TraceIdentifier属性:获取或设置在跟踪日志中表示此请求的唯一标识符。

Activity.Current属性:获取或设置当前线程的当前操作(Activity)。

var traceId = Activity.Current?.Id ?? httpContext?.TraceIdentifier;

从源码中我们可以看到,它会使用Activity Id作为首选,如果Activity Id为null,则会使用httpContext?.TraceIdentifier,你也可以使用这个方法来设置trace id。