gpt4 book ai didi

.net-core - Serilog 将空白 CorrelationId 发送到 Seq 记录器

转载 作者:行者123 更新时间:2023-12-04 15:48:53 27 4
gpt4 key购买 nike

我在 .net 核心 Web API 中使用 Serilog 和 Seq 来处理日志记录。我添加了对 Steve Gordon 的 CorrelationId Middleware 的引用从 header 中获取 X-Correlation-ID(或创建一个新 header )以更新 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); }
}
}

有什么想法吗?

最佳答案

当我执行以下操作(不是作为中间件)时,它对我有用:

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 的调用之间添加一个间接级别来解决它(如上所示)。

关于.net-core - Serilog 将空白 CorrelationId 发送到 Seq 记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54713878/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com