Enterprise Library 3.1 日志格式化程序模板 - 包括 URL 请求

发布于 2024-10-16 08:23:44 字数 552 浏览 8 评论 0原文

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

We have a custom web app built using Ektron v8.0 which uses EL 3.1 and the format template in the logging config is configured as such:

<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}
)}"
                />

Is there a template item for Request URL? Without the request url with querystring parameters, it's difficult to debug errors.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦在夏天 2024-10-23 08:23:44

没有专门针对请求 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);

There is no template item specifically for the request URL. You can add the request URL to the extended properties yourself so that the information is logged:

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

Since the formatter is logging all dictionary key/values your RequestUrl will show up in the log.

An alternative approach would be to create your own IExtraInformationProvider to populate the specific web information you are interested in. It's really the same thing except using an Enterprise Library interface.

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文