Расширенные поля ведения журнала HttpModule IIS .Net

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

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

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

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

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

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

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


person Grummle    schedule 01.06.2012    source источник


Ответы (1)


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

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

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

person Grummle    schedule 01.06.2012