【发布时间】:2023-03-17 02:35:02
【问题描述】:
这篇文章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 标头的 ASP.NET Core 应用程序都会将相同的标头附加到传出请求,但如果传入请求中不存在该标头,则会生成一个新值用于传出请求。
我们被要求将该值添加到来自 Web 应用程序 A 的响应中,但它(不足为奇)在传入请求中不可用。
我一直在查看 System.Diagnostics.Activity 类,但访问 Activity.Current 并没有给我任何有用的实例 - TraceID 只是 {} - 即为空。
我的问题是:如何在 Web 应用程序的上下文中访问 TraceId 值?
-S
【问题讨论】:
-
你试过
HttpContext.TraceIdentifier吗? -
是的,这会产生一个似乎跨越当前请求的不同 Id,但它似乎不会传播到下一个应用程序中。例如:Web 应用程序 A:
0HLTE0F4RQOTU:00000001WebApplication B:0HLTE0F5N8LF8:00000002在我的日志接收器中,该值被记录为“RequestId”,考虑到记录的“TraceId”似乎来自Request-Id,这有点令人困惑标题。我猜,给事物命名很难。
标签: asp.net-core .net-core system.diagnostics