HttpContext.TraceIdentifier всегда один и тот же (и Guid) - PullRequest
0 голосов
/ 28 мая 2020

Я настраиваю ведение журнала для своего. NET Core webapi и хочу иметь уникальный идентификатор для одного запроса.

После некоторого поиска в Google я обнаружил, что Serilog использует HttpContext.TraceIdentifier для этой цели и он должен выглядеть примерно так: «0HL0GJPLR7AOD».

Если я установил точку останова в методе контроллера, я получу HttpContext.TraceIdentifier как Guid, и, что еще хуже, он будет одинаковым каждый раз, а не по одному на запрос ( 800000ad-0002-fb00-b63f-84710c7967bb).

Это также то, что отображается в serilog как «RequestId», но мой главный вопрос: почему HttpContext.TraceIdentifier не в формате «некоторый текст» и почему один и тот же каждый запрос?

1 Ответ

1 голос
/ 24 июня 2020

Вероятно, это будет зависеть от того, где вы размещаете свое приложение, идентификатор трассировки в конечном итоге исходит из функции платформы хостинга. Если вы запустите свое приложение в Kestrel, например, используя профиль по умолчанию (обычно названный так же, как ваш проект), вы увидите формат ConnectionID: Count (см. этот ответ ).

Вот пример функции при запуске, как указано выше:

Running on Kestrel

If you run using IIS/Express you'll see a GUID, and in my testing it is unique per request... Here's the same example on IIS Express:

Running on IIS Express

Btw, you could set the TraceIdentifier yourself and/or you might also want to look at the Класс активности . Обычно это имеет приоритет над TraceIdentifier, например, на странице ошибки по умолчанию:

public class ErrorModel : PageModel
{
    public string RequestId { get; set; }

    public void OnGet()
    {
        RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
    }
}
...