企业库3.1日志格式化模板 - 包含URL请求

时间:2011-02-09 14:39:19

标签: asp.net logging c#-2.0 enterprise-library

我们有一个使用Ektron v8.0构建的自定义Web应用程序,它使用EL 3.1,日志配置中的格式模板配置如下:

<add
      name="Text Formatter"
      type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging"
      template="Timestamp: {timestamp}
Message: {message}
Category: {category}
Priority: {priority}
EventId: {eventid}
Severity: {severity}
Title:{title}
Extended Properties: {dictionary({key} - {value}
)}"
                />

请求网址是否有模板项?如果没有带有查询字符串参数的请求url,则很难调试错误。

1 个答案:

答案 0 :(得分:1)

没有专门针对请求网址的模板项。您可以自己将请求URL添加到扩展属性,以便记录信息:

string requestUrl = System.Web.HttpContext.Current.Request.Url.AbsoluteUri;

Dictionary<string, object> dictionary = new Dictionary<string, object>();
dictionary.Add("RequestUrl", requestUrl);

Logger.Write("My message", dictionary);

由于格式化程序正在记录您的RequestUrl将显示在日志中的所有字典键/值。

另一种方法是创建自己的IExtraInformationProvider来填充您感兴趣的特定Web信息。除了使用Enterprise Library界面之外,它实际上是相同的。

public class WebContextInformationProvider : IExtraInformationProvider
{
    public void PopulateDictionary(IDictionary<string, object> dict)
    {
        dict["RequestUrl"] = System.Web.HttpContext.Current.Request.Url.AbsoluteUri;
    }
}

Dictionary<string, object> dictionary = new Dictionary<string, object>();
WebContextInformationProvider webContext = new WebContextInformationProvider();

webContext.PopulateDictionary(dictionary);

Logger.Write("My message", dictionary);