Если вы сделаете это, вы забудете сменить пользователя, вы рискуете зарегистрировать действие для неправильного пользователя, если контекст потока был общим. Особенно не используйте это для свойств GlobalContext.

тоящее время я записываю все события log4net в базу данных, и это, кажется, работает нормально. Для захвата зарегистрированной учетной записи пользователя я использую этот фрагмент кода:

HttpContext context = HttpContext.Current;
if (context != null && context.User != null && context.User.Identity.IsAuthenticated)
{
    MDC.Set("user", HttpContext.Current.User.Identity.Name);
}

Код выглядит нормально, за исключением событий, с которыми не связан пользовательский контекст (т. Е. Пользователь на нашей общедоступной веб-странице). В этом случае захват log4net иногда записывает последнюю зарегистрированную учетную запись пользователя (плохо), а иногда записывает ноль (хорошо). Кто-нибудь получил эту функцию надежно работать во всех случаях? Мне кажется, я заметил, что MDC больше не является рекомендуемой функцией, но я не смог найти альтернативы, которые рекомендуется.

Примечание: я нахожу странным, что MDC установлен с именем учетной записи, но никогда не очищается, если ни один пользователь не активен. Это может быть частью проблемы. Однако я не нашел ни одного фрагмента кода MDC, который бы также очищал имя пользователя.

Ответы на вопрос(6)

Ваш ответ на вопрос