IIS .Net HttpModule 高级日志记录字段

Posted

技术标签:

【中文标题】IIS .Net HttpModule 高级日志记录字段【英文标题】:IIS .Net HttpModule Advanced Logging Fields 【发布时间】:2012-06-06 07:30:44 【问题描述】:

我正在尝试找到一种方法来记录用于匹配来自 MVC3 的路由的正则表达式(即/api/person/personid/address/addressid

我发现您可以使用 HttpResponse.AppendToLog 来在 IIS 日志中的 cs-uri-query 上附加一些内容,但这很麻烦,并且会使处理日志成为一个皮塔饼.这导致我使用HttpModules 和 IIS7 高级日志记录。

我目前的理解是,我可以通过HttpModule 将字段提供给高级日志记录。所以我应该能够在HttpContext 中查找 Route 对象使用的正则表达式,并将其公开为 Advanced Logging 可以使用和记录的字段。

我的问题是我在弄清楚如何将数据公开为高级日志记录可以使用的自定义 HttpModule 中的字段时遇到问题。

我需要LogRequest 的事件处理程序吗?如果我这样做,我应该在事件处理程序中做什么以使其可用于高级日志记录?

任何指针、代码示例和/或文档链接将不胜感激。

顺便说一句,如果您知道任何解释/列出 IIS7 中安装的默认模块中可用的“已发布”字段的文档,我将不胜感激。

【问题讨论】:

【参考方案1】:

好的,我最终处理这个问题的方法是创建一个HttpModule,它将从HttpContext 中提取路由模式并作为URL_PATTERN 放入服务器变量中。

一旦它在server_variables IIS7 高级日志记录可以得到它并保存它。如果当前请求没有路由,它将只使用 url 的正常本地部分(因此它将匹配日志中的 cs-uri-stem)。

现在 sql/log 解析查询:

select url_pattern,count(url_pattern) from (yourlogs) where timestamp between (start/end) group by url_pattern order by count(url_pattern) desc

将返回我应用中每个端点的命中次数。

这显然可以在 fubu a 行为中完成,但我们有一堆经典的 asp 和 MVC3 运行(我知道我知道...),这将处理所有这些.

您显然也可以使用RaiseTraceEvent 从模块中“发布”一个字段,然后 IIS7 高级日志记录可以使用该字段,但它让我很想弄清楚它,所以我只好用我所拥有的。

我已经在所有地方发布了这个问题,引用了 fubu 和 MVC3,但我几乎没有兴趣,这真的让我感到惊讶。如果您无法轻松确定正在使用的路线,人们如何在他们的日志中查找信息。

https://gist.github.com/2854760

我就把这个留在这里.... 这还有几个 unanwsered 部分,所以我会留下这篇文章,但不要将其标记为 anwser。

【讨论】:

以上是关于IIS .Net HttpModule 高级日志记录字段的主要内容,如果未能解决你的问题,请参考以下文章

权限维持:Win2008以上的iis

ASP.NET三剑客 HttpApplication HttpModule HttpHandler 解析

ASP.NET三剑客 HttpApplication HttpModule HttpHandler 解析

将 HttpModule .Net 类库移植到 .Net Core Web API

用于 IIS 7 的自定义 HttpModule 用于集成

ASP.NET Web API Security