2012-02-28 16 views
9

Chcę, aby wiadomość e-mail była wysyłana tylko w określonych warunkach, a błąd w dzienniku w DB we wszystkich przypadkach. Ale jak rozumiem, filtrowanie nie może działać dla jednego z dwóch. Czy to prawda? Jeśli tak, to jak mogę to osiągnąć?Jak rejestrować wszystkie błędy w DB, ale błędy e-mail tylko w trybie warunkowym?

Należy również zauważyć, że teraz I'm saving additional info to database na ErrorMail_Mailing w global.asax jak odpowiedział Atif Aziz. Ponieważ poczta e-mail będzie wysyłana tylko w trybie warunkowym, a pożary ErrorMail_Mailing będą wysyłane tylko podczas wysyłania wiadomości e-mail, zastanawiam się, w jaki sposób będę w stanie zapisać dodatkowe informacje o wszystkich błędach w bazie danych.

AKTUALIZACJA:
Mam trochę zmodyfikowany kod Elmah, aby zaspokoić moje potrzeby.

Odpowiedz

0

Jeśli chcesz zapisać wszystkie wyjątki do bazy danych powinien po prostu być w stanie korzystać z ErrorLogModule jak tak które powinny być niezależne od tego, co robisz w module błąd mail:

<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" /> 

, a następnie w Twoja elmah konfiguracja:

<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="MyConnectionString" /> 
+0

A co z pocztą e-mail? W tej chwili wziąłem kod źródłowy ELMAH i zmodyfikowałem go dla mojego celu. Ale to wymaga czasu. – IsmailS

2

Pierwszym krokiem jest skonfigurowanie modułów. Upewnij się dodać Elmah.ErrorFilterModule po którymś z modułów logowania z ELMAH, jak pokazano tu z ErrorLogModule:

<httpModules> 
    ...  
    //email 
    <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah"/> 
    //sql 
    <add name="ErrorSql" type="Elmah.SqlErrorLog, Elmah"/> 
    <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/> 

    ... 
</httpModules> 

Następnie w sekcji konfiguracji zarejestrowany Elmah.ErrorFilterSectionHandler jak pokazano tutaj:

<configSections> 
    <configSections> 
     <sectionGroup name="elmah"> 
      <section name="errorFilter" type="Elmah.ErrorFilterSectionHandler, Elmah"/> 
     </sectionGroup> 
    </configSections> 

teraz możesz dodać filtry, aby zdecydować, które błędy należy zignorować dla danego źródła. Poniższy przykład pokazuje, jak zapobiec wysyłaniu błędów HTTP 404.

<elmah> 
    <errorMail from="[email protected]" fromName="xx" to="[email protected]" subject="An unhandled exception occured xxx" priority="Normal" async="false" smtpServer="xx.xx.xx.com"/> 
    //sql 
    <errorLog name="ErrorSql" type="Elmah.SqlErrorLog, Elmah" connectionStringName="MyConnectionString" /> 
    <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/> 
    <errorFilter> 
     <test> 
      <and> 
       <equal binding="HttpStatusCode" value="404" type="Int32" /> 
       <regex binding="FilterSourceType.Name" pattern="mail" /> 
      </and> 
     </test> 
    </errorFilter> 
</elmah> 

Możesz uzyskać więcej informacji szczegółowych pod poniższym linkiem.

http://code.google.com/p/elmah/wiki/ErrorFiltering

0

Należy wypróbować StackExchange.Exceptional

Ten projekt był inspirowany przez ELMAH, ale nie odpowiadał naszym potrzebom szczególnych do rejestrowania błędów bardzo wysokiej głośności, gdy od sieci Wystąpił poziom .

StackExchange.Exceptional jest procedurą obsługi błędów używaną wewnętrznie przez Stack Exchange i Stack Overflow do logowania do SQL.

Obsługuje także pamięci błędów JSON i pamięci, filtrowanie wyjątków przed rejestracją oraz mechanizmy błędu/ponownej próby przechowywania błędów, jeśli wystąpi przerwa w łączeniu się ze składnicą błędów.

Jest wysoce konfigurowalny i bardzo łatwo dodać coś do swoich potrzeb. Jak widzę żądanie ściągnięcia ma funkcjonalność e-mail zaimplementowaną Email functionality, dzięki czemu możesz zacząć od tego miejsca.

Aby ją skonfigurować wystarczy spojrzeć na web.config i wybrać, co należy włączyć.

Mam nadzieję, że to pomaga.

+0

Dziękuję bardzo za szczegółową odpowiedź. Zmodyfikowałem trochę kod Elmah, aby zaspokoić moje potrzeby. – IsmailS

1

Dokumentacja ELMAH pod numerem error filtering ma section na dokładnie swój scenariusz i nazywa się, co odpowiada filtering by source. Na przykład poniższe informacje zapobiegną wysyłaniu pocztą e-mail błędów 404, ale będą nadal rejestrowane (przy założeniu, że zarejestrowane są oba moduły rejestrowania i rejestrowania):

<errorFilter> 
    <test> 
     <and> 
      <equal binding="HttpStatusCode" value="404" type="Int32" /> 
      <regex binding="FilterSourceType.Name" pattern="mail" /> 
     </and> 
    </test> 
</errorFilter> 
Powiązane problemy