2012-02-28 14 views
9

Deseo que el correo electrónico se envíe solo en una condición específica y error de registro en la base de datos en todos los casos. Pero según tengo entendido, el filtrado no puede funcionar para uno de los dos. ¿Está bien? Si es así, ¿cómo puedo lograrlo?¿Cómo registrar todos los errores en DB pero los errores de correo electrónico solo en base condicional?

También para tener en cuenta que, en este momento I'm saving additional info to database en ErrorMail_Mailing en global.asax como respuesta por Atif Aziz. Debido a que el correo electrónico se enviará solo con carácter condicional y ErrorMail_Mailing se activa solo mientras se envía el correo electrónico, me pregunto cómo podría guardar información adicional de todos los errores en la base de datos.

ACTUALIZACIÓN:
He modificado el código de Elmah un poco para satisfacer mi necesidad.

Respuesta

0

Si desea guardar todas las excepciones a la base de datos sólo debe ser capaz de utilizar el ErrorLogModule al igual que lo que debería ser independiente de lo que está haciendo en el módulo electrónico de error:

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

y luego en su sección elmah de su configuración:

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

Entonces qué sobre correo electrónico? En este momento tomé el código fuente de ELMAH y lo modifiqué para mi propósito. Pero se está tomando tiempo. – IsmailS

2

El primer paso es configurar los módulos. Asegúrese de agregar Elmah.ErrorFilterModule después de cualquiera de los módulos de registro de ELMAH, como se muestra aquí con 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> 

Luego, en su sección de configuración registrados Elmah.ErrorFilterSectionHandler como se muestra aquí:

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

Ahora puede agregar filtros para decidir qué errores ignorar para qué fuente. El siguiente ejemplo muestra cómo evitar que se envíen errores 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> 

Puede encontrar más información detallada en el siguiente enlace.

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

0

Debe probar el StackExchange.Exceptional

Este proyecto se inspiró en ELMAH, pero no se adaptaba a nuestras necesidades particulares para el registro de error muy, muy alto volumen cuando un Network- se produce el nivel .

StackExchange.Exceptional es el controlador de errores utilizado internamente por Stack Exchange y Stack Overflow para iniciar sesión en SQL.

También es compatible con JSON y de error de memoria almacena, filtrado de excepciones antes de iniciar sesión, y Falla/mecanismos de reintento para el almacenamiento de errores si hay una interrupción en la conexión a la tienda de error.

Es altamente personalizable y es muy fácil agregar algo según sus necesidades. Como puedo ver, una solicitud de extracción tiene la funcionalidad de correo electrónico implementada Email functionality para que pueda comenzar desde allí.

Para configurarlo solo necesita mirar el web.config y elegir qué habilitar.

Espero que ayude.

+0

Muchas gracias por la respuesta detallada. He modificado el código de Elmah un poco para satisfacer mi necesidad. – IsmailS

1

La documentación de ELMAH en error filtering tiene un section en exactamente su escenario y se llama, que equivale a filtering by source. Por ejemplo, la siguiente prevendrá errores 404 HTTP de ser enviado por correo, pero que será todavía conectado (suponiendo que ambos módulos de registro de correo y están registradas):

<errorFilter> 
    <test> 
     <and> 
      <equal binding="HttpStatusCode" value="404" type="Int32" /> 
      <regex binding="FilterSourceType.Name" pattern="mail" /> 
     </and> 
    </test> 
</errorFilter> 
Cuestiones relacionadas