.net core Serilog向Seq logger发送空白CorrelationId

.net core Serilog向Seq logger发送空白CorrelationId,.net-core,serilog,seq-logging,.net Core,Serilog,Seq Logging,我在.net核心web api中使用Serilog和Seq来处理日志记录。我添加了一个对Steve Gordon的引用,以从标题中获取X-Correlation-ID(或创建一个新的标题),从而更新TraceIdentifier 然后,我添加了另一个中间件类以将相关id推送到日志上下文中,但这无法正常工作: public class LogCorrelationIdMiddleware { private readonly RequestDelegate _next; publi

我在.net核心web api中使用Serilog和Seq来处理日志记录。我添加了一个对Steve Gordon的引用,以从标题中获取X-Correlation-ID(或创建一个新的标题),从而更新TraceIdentifier

然后,我添加了另一个中间件类以将相关id推送到日志上下文中,但这无法正常工作:

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); }
    }
}

知道为什么吗?

当我执行以下操作时(而不是作为中间件),这对我来说是可行的:

因此,我怀疑是您的
CorrelationId
被ASP.NET核心MVC覆盖了,直到这里:

以下是该问题的一些背景以及他们在
3.0
中处理该问题的计划:


很抱歉,这不是一个“修复”,但是我也遇到了同样的问题,并且能够通过在日志调用(在我的代码中)和log.Write调用(如上所示)之间添加一个间接级别来解决它。

关于这个问题的更多思考。。。这并不完美,因为在调用
LogWrapper.Foo(…)
的情况下,您会获得相关id,但是在发布代码之前发生的其他日志记录中,您不会得到相关id。。。可能只需要等到他们在3.0中解决这个问题。抱歉。这里有更多信息:这里:)为了快速修复,我只是将TraceIdentifier记录为“OriginId”,而不是“CorrelationId”。因为它只用于在日志中进行过滤,所以差别不大
using (LogContext.PushProperty("CorrelationId", "This is a test..."))
{
    Log.Write(level, exception, messageTemplate, propertyValues);
}