2011-03-29 2 views
0

Je voulais savoir s'il y a un moyen que je peux écrire ELMAH pour filtrer la journalisation d'erreur dans la logique suivante:filtrer plusieurs Elmah Conditions

Si l'erreur est une erreur 404 sur favicon.icoOU l'erreur est 404 sur /1.xmlOU l'erreur est 404 sur /2.xml

J'ai trouvé le moyen de faire exactement sur le favicon.ico comme indiqué:

<errorFilter> 
    <test> 
    <and> 
     <equal binding="HttpStatusCode" value="404" type="Int32" /> 
     <regex binding="Context.Request.ServerVariables['URL']" pattern="/favicon\.ico(\z|\?)" /> 
    </and> 
    </test> 
</errorFilter> 

Mais pour une raison quelconque, je ne peux pas comprendre comment le faire pour les conditions OR. Toute aide sera très appréciée.

Répondre

3

Ce qui suit devrait faire l'affaire ou autrement vous aider à démarrer:

<errorFilter> 
    <test> 
    <and> 
     <equal binding="HttpStatusCode" value="404" type="Int32" /> 
     <or> 
     <regex binding="Context.Request.ServerVariables['URL']" 
       pattern="/favicon\.ico(\z|\?)" /> 
     <regex binding="Context.Request.ServerVariables['URL']" 
       pattern="/[1-2]\.xml(\z|\?)" /> 
     </or> 
    </and> 
    </test> 
</errorFilter> 

Fondamentalement, ce filtrera les erreurs où le code d'état HTTP est 404 et l'un des motifs d'expressions régulières regroupées sous l'élément or correspondre à l'URL de la requête.

+0

Bonjour Atif, j'ai essayé ça et ça ne semble pas fonctionner. Je veux m'assurer que je me débrouille bien. Voici comment je lance l'exception lorsque je ne peux pas résoudre l'URL. throw new HttpException (404, String.Format ("Impossible de trouver le contrôleur pour le chemin '{0}' ou il n'implémente pas IController.", requestContext.HttpContext.Request.Path)); –

+0

Le module Elmah.ErrorFilterModule est-il enregistré et apparaît-il après tous les autres modules ELMAH dans la section modules? –

+0

Oui, j'ai tout configuré correctement. Remarqué une chose intéressante, le filtrage web.config déclaratif ne fonctionne pas, mais la partie programmatique fonctionne. J'ai résolu cela en utilisant l'approche programmatique, mais j'aimerais entendre d'autres idées. Si j'utilise simplement le bloc 404 sans aucune condition OR/regex (c'est-à-dire bloquer toutes les 404), cela fonctionne aussi. Je ferai d'autres recherches et ajouterai mon commentaire si je trouve autre chose. –