2010-05-18 11 views
22

मैं 404 त्रुटियों को फ़िल्टर करने के लिए ELMAH को कॉन्फ़िगर करने का प्रयास कर रहा हूं और मैं अपने Web.config फ़ाइल में XML- प्रदत्त फ़िल्टर नियमों के साथ कठिनाइयों में भाग रहा हूं। मैंने ट्यूटोरियल here और here का पालन किया और <test><or>... घोषणा के तहत एक <is-type binding="BaseException" type="System.IO.FileNotFoundException" /> घोषणा को जोड़ा, लेकिन यह पूरी तरह असफल रहा।ELMAH - फ़िल्टरिंग 404 त्रुटियां

जब मैं स्थानीय स्तर पर यह परीक्षण किया मैं Global.asax की void ErrorLog_Filtering() {} में एक ब्रेकपाइंट अटक और पाया कि System.Web.HttpException है, जो 404 के लिए ASP.NET द्वारा निकाल दिया जाता System.IO.FileNotFound का आधार प्रकार है प्रतीत नहीं होता है, बल्कि यह बस System.Web.HttpException है। मैंने इवेंट हैंडलर में e.Exception.GetBaseException().GetType() पर कॉल करके इसका परीक्षण किया।

अगला मैंने उम्मीद में <regex binding="BaseException.Message" pattern="The file '/[^']+' does not exist" /> को आजमाने का फैसला किया कि पैटर्न "फ़ाइल '/ foo.ext' मौजूद नहीं है," फ़ाइल '/ foo.ext' मौजूद नहीं है "फ़िल्टर किया जाएगा, लेकिन इसका कोई असर नहीं पड़ता है। आखिरी उपाय के रूप में मैंने <is-type binding="BaseException" type="System.Exception" /> की कोशिश की, और यहां तक ​​कि पूरी तरह से अवहेलना है।

मुझे लगता है कि ELMAH के साथ एक कॉन्फ़िगरेशन त्रुटि है, लेकिन मैं किसी को देखने में विफल रहता हूं। क्या मुझे कुछ स्पष्ट रूप से स्पष्ट याद आ रही है?

यहाँ मेरी web.config से प्रासंगिक सामान है:

<configuration> 
    <configSections> 
    <sectionGroup name="elmah"> 
     <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/> 
     <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah"/> 
     <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah"/> 
     <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" /> 
    </sectionGroup> 
    </configSections> 
    <elmah> 
    <errorFilter> 
     <test> 
     <or> 
      <equal binding="HttpStatusCode" value="404" type="Int32" /> 
      <regex binding="BaseException.Message" pattern="The file '/[^']+' does not exist" /> 
     </or> 
     </test> 
    </errorFilter> 
    <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data/logs/elmah" /> 
    </elmah> 
    <system.web> 
    <httpModules> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/> 
    </httpModules> 
    </system.web> 
    <system.webServer> 
    <modules> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" /> 
    </modules> 
    </system.webServer> 
</configuration> 
+2

कि ... – Baldy

+0

@Baldy दुर्भाग्य से, कि एक नया विकास है। आपको अपनी आवश्यकता के लिए मेरे कॉन्फ़िगरेशन नमूना का संदर्भ ले सकते हैं। –

+1

इसका ठीक नाथन, विषय सहायक था। मुझे बस यह मजाकिया लगता है कि विषय लगभग 404 है, और पृष्ठ पर दिए गए लिंक में से एक 404 की ओर जाता है :) – Baldy

उत्तर

38

यह वास्तव में एक कॉन्फ़िगरेशन त्रुटि है, बस एक है कि विशेष रूप से स्पष्ट था नहीं था।

जिस क्रम में ईएलएमएएच एचटीपी मॉड्यूल पंजीकृत हैं, वह एक महत्वपूर्ण चिंता है क्योंकि ईएलएमएएच के अपवाद को फ़िल्टर करने के लिए इसे पहले पता होना चाहिए कि कौन से मॉड्यूल अपवाद का उपभोग करेंगे। अन्य मॉड्यूल को फ़िल्टर किए जाने वाले अपवाद को संसाधित करने से रोकने के लिए त्रुटिफिल्टर HttpModule को अंतिम पंजीकृत होना चाहिए। यह मेरे लिए पीछे की तरह लगता है, लेकिन कम से कम यह काम करता है।

<configuration> 
    ... 
    <system.web> 
    <httpModules> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/> 
    </httpModules> 
    </system.web> 
    <system.webServer> 
    <modules> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" /> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/> 
    </modules> 
    </system.webServer> 
</configuration> 

ELMAH Wiki entry on ErrorFiltering समीक्षा करने के बाद फिर से मैं जानकारी के इस छोटे से tidbit जो वास्तव में, एक < मजबूत/> टैग हकदार अगर आप मुझसे पूछें की खोज की। (संपादित: वे इसे बोल्ड कर दिया है के बाद से मैं पहली बार इस सवाल का जवाब; सहारा!)

पहला कदम Elmah.ErrorFilterModule नामक एक अतिरिक्त मॉड्यूल कॉन्फ़िगर करना है। सुनिश्चित करें कि आप ELMAH से प्रवेश मॉड्यूल में से किसी के बाद यह जोड़ने के लिए, के रूप में ErrorLogModule साथ यहाँ दिखाया गया है बनाओ: 2 लिंक एक 404. ओह विडंबना फेंकता

संबंधित मुद्दे