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