Serilog отправляет пустой CorrelationId в Seq logger - PullRequest
0 голосов
/ 15 февраля 2019

Я использую Serilog и Seq в web-интерфейсе ядра .net для обработки журналов.Я добавил ссылку на Middleware CorvelationId Стива Гордона , чтобы получить X-Correlation-ID из заголовков (или создать новый) для обновления TraceIdentifier.

У меня тогдадобавлен еще один класс промежуточного программного обеспечения для вставки идентификатора корреляции в контекст журнала, но он работает неправильно:

public class LogCorrelationIdMiddleware
{
    private readonly RequestDelegate _next;
    public LogCorrelationIdMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public Task Invoke(HttpContext context)
    {
        // doesn't work - blank CorrelationId in Seq
        using (LogContext.PushProperty("CorrelationId", context.Request.HttpContext.TraceIdentifier)) { return _next(context); }

        // works - correct CorrelationId2 in Seq 
        //using (LogContext.PushProperty("CorrelationId2", context.Request.HttpContext.TraceIdentifier)) { return _next(context); }
    }
}

Есть идеи, почему?

1 Ответ

0 голосов
/ 19 февраля 2019

Это работает для меня, когда я делаю следующее (не как промежуточное программное обеспечение):

using (LogContext.PushProperty("CorrelationId", "This is a test..."))
{
    Log.Write(level, exception, messageTemplate, propertyValues);
}

Так что я подозреваю, что ваша CorrelationId перезаписывается ASP.NET Core MVC, как указано здесь: https://github.com/serilog/serilog-aspnetcore/issues/59

Некоторые сведения об этой проблеме и их планы по ее решению в 3.0 также приведены здесь: https://github.com/aspnet/AspNetCore/issues/5918

Извиняюсь, что это не «исправление», однако яимел ту же проблему и смог обойти ее, добавив уровень косвенности между вызовом журнала (в моем коде) и вызовом Log.Write (как показано выше).

...