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

时间:2012-06-01 02:51:16

标签: .net iis logging iis-7 httpmodule

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

我发现您可以使用HttpResponse.AppendToLog将某些内容添加到IIS日志中的 cs-uri-query ,但这非常hacky并且处理日志皮塔饼。这导致我HttpModules和IIS7高级日志记录。

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

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

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

非常感谢任何指针,代码示例和/或文档链接。

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

1 个答案:

答案 0 :(得分:2)

好的,我最终处理此问题的方法是创建一个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行为中完成,但我们有一堆经典的asp和MVC3在运行(我知道我知道...... )这将处理所有这些

你也可以使用RaiseTraceEvent显然从一个模块中“发布”一个字段,然后IIS7高级日志可以得到它,但是它让我适合尝试解决这个问题所以我只是选择了我拥有的东西

我在引用fubu和MVC3的地方发布了这个问题,我几乎没有兴趣,这让我很惊讶。如果你不能轻易确定使用的路线,人们如何在日志中查询信息。

https://gist.github.com/2854760

我会把它留在这里...... 还有几个未经证实的部分,所以我将留下这篇文章,但不要将它标记为anwser。