Захват имени пользователя с помощью log4net

В настоящее время я записываю все события 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, которые также очищают имя пользователя.

19
задан Rolf Kristensen 27 May 2017 в 22:57
поделиться