1

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

谢谢,

在此处输入图像描述

4

1 回答 1

1

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();
}
于 2020-07-05T10:33:55.540 回答