首页 文章

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

提问于
浏览
3

我正试图找到一种方法来记录用于匹配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 回答

  • 2

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

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

    Now sql / log parser the query:

    select url_pattern,count(url_pattern) from (yourlogs) where timestamp between (start/end) group by url_pattern order by count(url_pattern) desc
    

    将告诉我应用程序中每个 endpoints 的点击次数 .

    这显然可以在fubu中完成一个行为,但我们有一堆经典的asp和MVC3在运行(我知道我知道......),这将处理所有这些 .

    你也可以使用 RaiseTraceEvent 显示'publish'一个模块中的一个字段,然后IIS7高级日志可以得到它,但它让我适合尝试解决它,所以我只是去了我所拥有的 .

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

    https://gist.github.com/2854760

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

相关问题