2012-06-01 3 views
3

닷넷 HttpModule의 고급 로깅 ​​필드 IIS (즉 /api/person/{personid}/address/{addressid})내가 경기에 MVC3에서 경로를 사용 된 정규 표현식을 기록 할 수있는 방법을 찾기 위해 노력하고있어

나는 당신이 HttpResponse.AppendToLog를 사용할 수있는 것으로 나타났습니다 IIS 로그에 cs-uri-query에 뭔가를 추가하려면이 작업은 꽤 어렵고 pita 로그를 처리하게합니다.이 작업으로 HttpModules 및 IIS7 고급 로깅이 발생했습니다.

현재로서는 HttpModule에서 고급 로깅에 사용할 수있는 필드를 만들 수 있습니다. 그래서 HttpContext에서 Route 객체가 사용하는 정규식을 찾아서 고급 로깅이 소비 및 기록 할 수있는 필드로 드러 낼 수 있어야합니다.

내 문제는 고급 로깅을 사용할 수있는 사용자 지정 HttpModule의 필드로 데이터를 노출하는 방법을 정확하게 파악하는 데 문제가 있다는 것입니다.

LogRequest에 대한 이벤트 처리기가 있어야합니까? 고급 로깅을 위해 소모품으로 만들기 위해 이벤트 처리기에서 수행해야하는 작업은 무엇입니까?

모든 포인터, 코드 샘플 및/또는 문서 링크는 크게 감사하겠습니다.

IIS7에 설치된 기본 모듈에서 사용 가능한 '게시 된'필드를 설명하고 나열하는 문서는 제쳐두고 제가 링크를 고맙게 생각합니다.

답변

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

난 그냥 내가이 게시물을 떠날거야이 여러 unanwsered 부분은 여전히 ​​ 있습니다 .... 여기를 떠나지 만에게 anwser를 표시하지 것이다.