2011-02-09 52 views
2

我们有一个自定义的Web应用程序内置利用使用EL 3.1晔V8.0,并在日志配置的格式模板被配置为这样:企业库3.1日志格式化模板 - 包括URL请求

<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的模板项吗?如果没有带查询字符串参数的请求url,则很难调试错误。

回答

1

没有专门用于请求URL的模板项目。你可以请求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信息。除了使用企业库接口外,其实是一样的。

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); 
+0

我看了看3.1日志MSDN文章,我没有看到那里的文档的模板。有任何想法吗? 我会接受你的答案,因为我认为这是唯一可行的解​​决方案。感谢您提供一个清晰,简洁的答案。 – 2011-02-10 16:04:21