2012-06-01 1 views
3

Я пытаюсь найти способ, чтобы войти в регулярное выражение, которое было использовано в матче маршрут из MVC3 (т.е. /api/person/{personid}/address/{addressid})IIS .Net HttpModule Advanced Logging Поля

Я обнаружил, что вы можете использовать HttpResponse.AppendToLog в чтобы добавить что-то на cs-uri-query в журналах IIS, но это довольно хаки и делает обработку журналов pita.This привело меня к HttpModules и IIS7 Advanced logging.

Мое настоящее понимание заключается в том, что я могу сделать поля доступными для расширенного ведения журнала с HttpModule. Поэтому я должен иметь возможность искать регулярное выражение, используемое объектом Route в HttpContext, и выставлять это как поле, которое Advanced Logging может потреблять и регистрировать.

Моя проблема заключается в том, что у меня возникают проблемы с выяснением того, как предоставить данные в виде поля в пользовательском HttpModule, который может использовать Advanced Logging.

Должен ли я иметь обработчик событий для LogRequest? Если я сделаю это, что я должен делать в обработчике событий, чтобы сделать его доступным для расширенного ведения журнала?

Любые указатели, образцы кода и/или ссылки на документацию были бы с благодарностью.

Как известно, если вы знаете какую-либо документацию, объясняющую/указывающую доступные «опубликованные» поля из модулей по умолчанию, установленных в IIS7, я был бы признателен за ссылку.

ответ

2

OK, способ, которым я в конечном итоге занимаюсь этим, заключается в создании HttpModule, который вытащит шаблон маршрута из HttpContext и поместит в переменные сервера URL_PATTERN.

После этого в server_variables IIS7 Advanced Logging может получить его и сохранить. Если текущий запрос не имеет маршрута, он просто будет использовать обычную локальную часть 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 Advanced Logging может получить поддержку, но это давало мне возможность, пытаясь понять это, поэтому я просто пошел с тем, что у меня есть.

Я разместил этот вопрос по всему месту, ссылаясь на fubu и MVC3, и у меня мало интереса, который меня действительно удивил. Как люди выскакивают в своих журналах информацию, если вы не можете легко определить используемые маршруты.

https://gist.github.com/2854760

Я просто оставлю это здесь .... Есть еще несколько unanwsered частей к этому, так что я оставлю этот пост, но не метят ему anwser.