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

3
我正在尝试找到一种记录使用的正则表达式以匹配MVC3路由(即/api/person/{personid}/address/{addressid})的方法。
我发现可以使用HttpResponse.AppendToLog将内容附加到IIS日志中的cs-uri-query,但这样做相当繁琐且使日志处理变得困难。这引导我开始考虑使用HttpModules和IIS7高级日志。
目前我的理解是,我可以从HttpModule中使字段对高级日志可用。因此,我应该能够查找Route对象中使用的正则表达式,并将其公开为高级日志可以消耗和记录的字段。 但是,我的问题是我在尝试弄清楚如何将数据公开为高级HttpModule字段时遇到了问题。 我需要为LogRequest创建事件处理程序吗?如果是这样,我在事件处理程序中应该做些什么才能让它可供高级日志使用?
非常感谢您能提供任何提示、代码示例和/或文档链接。
顺便提一下,如果您知道有关IIS7中安装的默认模块可用的“发布”字段的任何说明/列表的文档,我会非常感激一个链接。
1个回答

2

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

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

现在对查询进行sql /日志解析:

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

我只是把它放在这里....

这仍然有几个未回答的部分,所以我将离开这篇文章,但不标记它为答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接