Мы используем log4net в качестве библиотеки журналов для нашей многопользовательской веб-роли Azure. Приложение ADO.Net log4net используется для регистрации всех ошибок в базе данных SQL Azure. Чтобы фильтровать журналы по клиенту / пользователю, мы используем несколько свойств log4net.GlobalContext, например:
log4net.GlobalContext.Properties["Domain"] = new Log4netDomainProvider();
log4net.GlobalContext.Properties["Username"] = new Log4netUsernameProvider();
Каждый «Провайдер» - это простой класс, который переопределяет метод ToString (). Когда ToString () вызывается log4net, мы получаем значение из текущего сеанса (этот метод обсуждается в этом SO ответе ).
public class Log4netDomainProvider
{
public override string ToString()
{
string retval = null;
if (HttpContext.Current == null)
retval = "HttpContext is null";
else if (HttpContext.Current.Session == null)
retval = "HttpContext.Current.Session is null";
else
retval = HttpContext.Current.Session["Domain"];
return retval;
}
}
Я надеюсь, что это ответит на ваш вопрос. Если это так, вы можете проверить эту хорошую рецензию в контексте ведения журнала log4net.