Эта статья, https://devblogs.microsoft.com/aspnet/improvements-in-net-core-3-0-for-troubleshooting-and-monitoring-distributed-apps/, рассказывает мне, что поле TraceId доступно в качестве идентификатора корреляции, что здорово!
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)'
На самом деле, я вижу это в наш приемник журналов работает так, как объявлено: когда веб-приложение A обслуживает запрос и при этом вызывает веб-приложение B, они оба записывают одно и то же значение TraceId в журнал.
Насколько я понимаю, любое ASP. NET Базовое приложение, которое получает входящий заголовок Request-Id
, присоединит тот же заголовок к исходящим запросам, но если заголовок не существует во входящем запросе для исходящего запроса будет сгенерировано новое значение.
Нас попросили добавить это значение в ответ от веб-приложения A, но (что неудивительно) недоступно для входящего запроса.
Я смотрю на класс System.Diagnostics.Activity
, но доступ к Activity.Current
не дает мне экземпляра с чем-нибудь полезным - TraceID просто {}
- то есть пуст.
Мой вопрос это: Как я могу получить доступ к значению TraceId в контексте веб-приложения?
-S