在Azure上实现低开销分布式日志记录的更好方法是什么?
答案 0 :(得分:1)
我们使用log4net作为我们的多用户Azure Web角色的日志记录库。 log4net ADO.Net appender用于将所有错误记录到SQL Azure数据库。要按客户端/用户过滤日志,我们使用一些log4net.GlobalContext属性,如下所示:
log4net.GlobalContext.Properties["Domain"] = new Log4netDomainProvider();
log4net.GlobalContext.Properties["Username"] = new Log4netUsernameProvider();
每个“Provider”只是一个覆盖ToString()方法的简单类。当log4net调用ToString()时,我们从当前会话中获取一个值(此技术将在此SO answer中讨论)。
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日志记录上下文中查看此好write-up。