gpt4 book ai didi

asp.net-core - 如何获取当前的TraceId和SpanId

转载 作者:行者123 更新时间:2023-12-03 13:34:14 25 4
gpt4 key购买 nike

本文https://devblogs.microsoft.com/aspnet/improvements-in-net-core-3-0-for-troubleshooting-and-monitoring-distributed-apps/告诉我,字段TraceId可以用作相关ID,这太好了!

info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
=> ConnectionId:0HLR1BR0PL1CH
=> RequestPath:/weatherforecastproxy
RequestId:0HLR1BR0PL1CH:00000001,
SpanId:|363a800a-4cf070ad93fe3bd8.,
TraceId:363a800a-4cf070ad93fe3bd8,
ParentId: Executed endpoint 'FrontEndApp.Controllers.WeatherForecastProxyController.Get
(FrontEndApp)'

实际上,我可以看到在我们的日志接收器中它的工作如广告所示:当Web应用程序A为请求提供服务并调用Web应用程序B时,它们两个都将相同的TraceId值写入日志。

据我了解,任何接收到传入的 Request-Id header 的ASP.NET Core应用程序都会将相同的 header 附加到传出的请求上,但是,如果 header 不存在于传入的请求上,则会为传出的请求生成一个新值。

我们被要求将这个值添加到Web应用程序A的响应中,但是(在传入请求中)它不(不足为奇)。

我一直在看 System.Diagnostics.Activity类,但是访问 Activity.Current并没有为我提供任何有用的实例-TraceID只是 {}-即为空。

我的问题是:如何在Web应用程序的上下文中访问TraceId值?

-S

最佳答案

当我尝试添加带有TraceId值的 header 时,我遇到了同样的问题。
用ModelValidation进行了一些测试,然后我看到在这种错误响应中,“traceId”值是正确的,但是我无法以任何方式从http上下文变量中获取此值。
然后,我转到了网络核心源代码,以了解 DefaultProblemDetailsFactory 的实现并感到惊讶!通过执行以下操作可获取“traceId”值:

var traceId = Activity.Current?.Id ?? httpContext?.TraceIdentifier;
是的,您可以使用Activity静态变量获取THETraceId。

关于asp.net-core - 如何获取当前的TraceId和SpanId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60145996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com