在Azure上实现低开销分布式日志记录的更好选择是什么?

时间:2011-06-28 05:10:05

标签: logging azure

在Azure上实现低开销分布式日志记录的更好方法是什么?

1 个答案:

答案 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