2010-03-02 2 views
8

Я использую Elmah с ASP.NET и задаюсь вопросом, как добавить пользовательские данные, такие как переменная сеанса, в необработанную электронную почту исключения.Пользовательские данные Elmah YSOD

Я пробовал несколько обработчиков в файле Global.asax, но, похоже, не нашел подходящего.

ответ

4

Для этого, я думаю, вам нужно будет изменить Elmah source и перекомпилировать. Этого не должно быть слишком сложно. Если вы посмотрите в конструкторе класса Elmah.Error, передается HttpContext, из которого вы сможете получить необходимую информацию, например. Сессия, форма переменные и т.д. Вы можете добавить пользовательские поля к Elmah.Error классу для этих данных

Я думаю Elmah.ErrorMailHtmlFormatter класс, где электронная почта построена с использованием HtmlTextWriter, и здесь вы можете вставить код в методе RenderSummary() чтобы включить в него пользовательские поля, добавленные в Elmah.Error.

Я знаю, что может возникнуть боль, чтобы начать работать с источником, но лично я считаю, что это самый чистый способ, поскольку в настоящее время нет возможности для создания шаблонов отчетов/электронной почты, и лучше, что закрепить что-то, чтобы изменить результат после него был сгенерирован.

1

Ответ Андрея помог многим, спасибо. Я закончил делать следующее:

  1. Добавлено событие OnBuilding в http-модуль ErrorMail. Событие args для этого события имеет свойство NameValueCollection.
  2. Я обработал событие OnBuilding в global.asax.
  3. Поскольку HttpModules не всегда имеют доступ к sessionstate, esp. если это исключение происходит до загрузки сеанса, я скопировал данные, которые мне были отправлены в кеш HttpApplication (индексируется sessionid).
  4. Когда возникает исключение, я беру данные, которые я хочу извлечь из кэша приложений, с помощью сеанса, хранящегося в запросе (в частности, в файле cookie). Я генерирую NameValueCollection из этих данных и отправляю его обратно в httpmodule через Аргументы OnBuilding.
  5. Данные затем передаются по электронной почте аналогично тому, как визуализируется раздел переменных сервера.
Смежные вопросы