3

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

我发现您可以使用它来在 IIS 日志中的cs-uri-queryHttpResponse.AppendToLog上附加一些内容,但这非常棘手,并且使处理日志成为一个 pita。这导致我使用IIS7 高级日志记录。HttpModules

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

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

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

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

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

4

1 回答 1

2

好的,我最终处理这个问题的方法是创建一个HttpModule将从 中提取路由模式HttpContext并作为URL_PATTERN.

一旦它在server_variablesIIS7 中高级日志记录可以得到它并保存它。如果当前请求没有路由,它将只使用 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 运行(我知道我知道......),这将处理所有这些。

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

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

https://gist.github.com/2854760

我就把这个留在这里....还有几个 unanwsered 部分,所以我会离开这个帖子,但不要将它标记为 anwser。

于 2012-06-01T20:54:05.663 回答