在接下来等待之后,当我尝试使用 serilog LogContext 时,它不会推送任何 属性 来记录消息

after await next when I try to use serilog LogContext it doesn’t push any property to log messages

在为 Serilog 和 SEQ 设置所有内容时,我遇到了一个问题,您可能有答案。 我正在尝试使用 LogContext.PushProperty 向所有日志添加一些属性。但是,在我的中间件(见下图)中,LogContext 可以在等待 next.Invoke() 之前将 属性 推送到日志。在 await next 之后,当我尝试使用 LogContext 时,它不会推送任何 属性 来记录消息。 问题是声明在 await next.Invoke() 之前总是空的,它们只有在 await next 之后才有值,所以我不得不在 await 之后使用 LogContext 但它在那里不起作用,如前所述。有知道的请指教吗?

谢谢,

LogContext 需要与 using 块一起使用,覆盖您希望 属性 可用的整个范围。你可能需要这样的东西:

IDisposable popContext = null;

var user2 = context.User as IAMClaimsUser;
if (user2 != null && !string.IsNullOrEmpty(user2.FirstName))
{
    popContext = LogContext.PushProperty("UserEmail", user2.Email);
}

using (popContext)
{
    // `UserEmail` will be attached to events logged in this block
    await next();
}