我正在尝试找到一种方法来记录用于匹配MVC3路由的正则表达式(即/api/person/{personid}/address/{addressid}
)
我发现您可以使用HttpResponse.AppendToLog
将某些内容添加到IIS日志中的 cs-uri-query ,但这非常hacky并且处理日志皮塔饼。这导致我HttpModules
和IIS7高级日志记录。
我目前的理解是,我可以从HttpModule
为高级日志记录提供字段。所以我应该能够在HttpContext
中查找Route对象使用的正则表达式,并将其公开为高级日志记录可以使用和记录的字段。
我的问题是,我在确定如何将数据公开为高级记录可以使用的自定义HttpModule
中的字段时遇到问题。
我是否需要LogRequest
的事件处理程序?如果我这样做,我应该在事件处理程序中做什么,以使其可用于高级日志记录?
非常感谢任何指针,代码示例和/或文档链接。
顺便说一句,如果您知道任何文档解释/列出IIS7中安装的默认模块中可用的“已发布”字段,我会很感激。
答案 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。