我正试图找到一种方法来记录用于匹配MVC3路由的正则表达式(即 /api/person/{personid}/address/{addressid}
)
我发现你可以使用 HttpResponse.AppendToLog
将某些东西附加到IIS日志中的 cs-uri-query 上,但这非常hacky并且使得处理日志成为一个皮塔饼 . 这导致我 HttpModules
和IIS7高级日志记录 .
我目前的理解是,我可以从 HttpModule
为高级日志记录提供字段 . 所以我应该能够在 HttpContext
中查找Route对象使用的正则表达式,并将其公开为高级日志记录可以使用和记录的字段 .
My issue is that I'm having issues figuring out exactly how to expose data as a field in a custom HttpModule that Advanced Logging can consume.
我是否需要为 LogRequest
设置事件处理程序?如果我这样做,我应该在事件处理程序中做什么使其可用于高级日志记录?
任何指针,代码示例和/或文档链接将不胜感激 .
顺便说一句,如果您知道任何文档解释/列出IIS7中安装的默认模块中可用的“已发布”字段,我会很感激 .
1 回答
好吧,我最终处理这个问题的方法是创建一个
HttpModule
,它将从HttpContext
拉出路由模式并将其作为URL_PATTERN
放入服务器变量中 .一旦它在
server_variables
IIS7高级日志记录中就可以获得并保存它 . 如果当前请求没有使用url的正常本地部分(因此它将匹配日志中的 cs-uri-stem ) .Now sql / log parser the query:
将告诉我应用程序中每个 endpoints 的点击次数 .
这显然可以在fubu中完成一个行为,但我们有一堆经典的asp和MVC3在运行(我知道我知道......),这将处理所有这些 .
你也可以使用
RaiseTraceEvent
显示'publish'一个模块中的一个字段,然后IIS7高级日志可以得到它,但它让我适合尝试解决它,所以我只是去了我所拥有的 .我已经在引用fubu和MVC3的地方发布了这个问题,我几乎没有兴趣,这让我很惊讶 . 如果您无法轻易确定所使用的路线,人们如何在日志中查询信息 .
https://gist.github.com/2854760
我会把它留在这里......还有几个未经证实的部分,所以我会留下这个帖子,但不要把它标记为anwser .