2010-03-02 16 views
8

Używam programu Elmah z programem ASP.NET i zastanawiam się, w jaki sposób dodać niestandardowe dane, takie jak zmienna sesji, do nieobsługiwanego adresu e-mail wyjątku.Niestandardowe dane Elmah YSOD

Próbowałem już kilku programów obsługi w pliku Global.asax, ale nie można znaleźć odpowiedniego.

Odpowiedz

4

W tym celu myślę, że trzeba zmodyfikować Elmah source i ponownie skompilować. Nie powinno to być zbyt trudne do osiągnięcia. Jeśli zajrzysz do konstruktora klasy Elmah.Error, zostanie przekazana HttpContext, z której będziesz mógł uzyskać potrzebne informacje, np. Sesja, zmienne Formularz itp Można dodawać pól niestandardowych do klasy Elmah.Error do tych danych

myślę klasa Elmah.ErrorMailHtmlFormatter jest, gdy e-mail jest skonstruowany przy użyciu HtmlTextWriter i tu można wstawić kod w metodzie RenderSummary() aby zaliczyć niestandardowe pola dodane do Elmah.Error.

Wiem, że rozpoczęcie pracy ze źródłem może być bolesne, ale osobiście uważam, że jest to najczystszy sposób, ponieważ obecnie nie ma możliwości tworzenia szablonów raportów/wiadomości e-mail, a lepiej jest, aby coś zmienić, aby zmienić wynik po nim został wygenerowany.

1

Odpowiedź Andrzeja bardzo pomogła, dzięki. Skończyło się na tym, że:

  1. Dodano zdarzenie OnBuilding do modułu http ErrorMail. Argumenty zdarzenia dla tego zdarzenia mają właściwość NameValueCollection.
  2. Obsługiwałem zdarzenie OnBuilding w pliku global.asax.
  3. Ponieważ HttpModules nie zawsze mają dostęp do sessionstate, esp. jeśli wyjątek występuje przed załadowaniem sesji, skopiowałem dane, które chciałem zgłosić, do pamięci podręcznej HttpApplication (zindeksowane przez sessionid).
  4. Gdy wystąpi wyjątek, pobieram dane, które chcę, z pamięci podręcznej aplikacji przez parametr sessionid zapisany w żądaniu (konkretnie w pliku cookie). Generuję NameValueCollection z tych danych i wysyłam je do httpmodule za pomocą argumentów OnBuilding.
  5. Dane są następnie renderowane do wiadomości e-mail w podobny sposób, w jaki jest renderowana sekcja zmiennych serwera.
Powiązane problemy