после ожидания следующего, когда я пытаюсь использовать serilog LogContext, он не помещает никаких свойств в журнал сообщений

Устанавливая все для Serilog и SEQ, я застрял в проблеме, на которую у вас может быть ответ. Я пытаюсь добавить некоторые свойства во все журналы с помощью LogContext.PushProperty. Однако в моем промежуточном программном обеспечении (см. Изображение ниже) LogContext может помещать свойство в журналы до того, как await next.Invoke(). Хотя после await next, когда я пытаюсь использовать LogContext, он не помещает никаких свойств в журнал сообщений. Проблема в том, что утверждения всегда пусты перед await next.Invoke(), и они имеют значения только после await next, поэтому я вынужден использовать LogContext после await, но он там не работает, как упоминалось. Посоветуйте, пожалуйста, в разгадке?

Спасибо,

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();
}
Другие вопросы по тегам