ELMAh

2009-04-17 12 views
8

में ब्लॉक 404 FavIco त्रुटि मैं बॉक्स कि ELMAH लॉग 404 अपने स्थानीय सर्वर पर favico के लिए नहीं मिला से बाहर देखा। मैं फ़िल्टर के माध्यम से इस त्रुटि को कैसे दबा सकता हूं? मैं अभी तक यह configurating के साथ इतना परिचित नहीं हूँ ..ELMAh

उत्तर

18

आधिकारिक elmah Error Filtering page तरीके इस 404 फ़ेविकॉन त्रुटि दबा जा सकता है की एक संख्या बताते हैं।

आप सभी 404 त्रुटियों को वेब.config में घोषित रूप से फ़िल्टर कर सकते हैं। मैं कुछ नहीं कर रहा हूँ वहाँ एक रास्ता केवल एक फ़ेविकॉन के लिए 404 को दबाने के लिए, हालांकि है।

<errorFilter> 
    <test> 
     <equal binding="HttpStatusCode" value="404" type="Int32" /> 
    </test> 
</errorFilter> 

आप इसे प्रोग्राम के रूप में करना चाहता था, तो आप Errorlog या ErrorEmail छानने की घटनाओं में त्रुटि के रूप में आधिकारिक डॉक्स में विस्तार से बताया खारिज कर सकता है। नीचे दिए गए कोड को थोड़ा overkill है, लेकिन यह दर्शाता है कि कैसे आप एक /favicon.ico अनुरोध के लिए केवल 404 त्रुटियों को फ़िल्टर कर सकते हैं।

void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e) 
{ 
    if (((HttpException)e.Exception.GetBaseException()).GetHttpCode() == 404 
     && ((HttpContext)e.Context).Request.Path == "/favicon.ico") 
    { 
     e.Dismiss(); 
    } 
} 

मैं व्यक्तिगत रूप से web.config के माध्यम से सभी 404 एलान के तौर पर या तो फिल्टर करने के लिए पसंद करते हैं, या सिर्फ योएल पता चलता है की तरह एक फ़ेविकॉन प्रदान करते हैं।

+0

यह काम करेगा, लेकिन मैं * सभी * 404 त्रुटियों को फ़िल्टर करने की अनुशंसा नहीं करता। यह ईल्माह की शक्ति को सीमित करने का एक प्रकार है। मैं जोएल के दृष्टिकोण के पक्ष में अधिक हूं जहां आप वास्तव में समस्या को ठीक करते हैं। – senfo

+2

लोएल! मैं बस चला गया .. ओह हाँ मैं सिर्फ वास्तव में एक फ़ेविकॉन जोड़ सकते हैं! – gideon

13

यह मदद नहीं करता है आप ELMAH को कॉन्फ़िगर कैसे करें, लेकिन के लिए एक फ़ेविकॉन एक प्रदान करना है अनुरोधों के लिए एक 404 को रोकने के लिए सबसे आसान तरीका है ...

सीखना
2

मैं सिर्फ Elmah को विन्यस्त बजाय मार्ग ध्यान न दें। यह मेरे लिए काम करता है:

routes.IgnoreRoute("{*favicon}", new {[email protected]"(.*/)?favicon.ico(/.*)?"}); 
+1

क्या आप वाकई इसे ELMAH के साथ जांच चुके हैं? मार्ग को अनदेखा करना काम नहीं करता है। यह सिर्फ एमवीसी द्वारा अनुरोध को अनदेखा करने का कारण बनता है और नियमित एएसपी.नेट पाइपलाइन पर जाता है जो 404s है, जो ईएलएमएएच में लॉग इन होने का कारण बनता है। –

+0

थोड़ा समय के बाद से मुझे लगता है कि कोड को देखा गया है, तो मैं दोबारा जांच करने की जरूरत है, लेकिन मैं एक जीवित साइट पर तकनीक का इस्तेमाल किया और यह मेरे लिए काम करने के लिए दिखाई दिया। क्या यह आईआईएस 6 और आईआईएस 7 के बीच एक अंतर है? – Junto

+0

चाहे आपको इसकी आवश्यकता हो या नहीं, सर्वर कॉन्फ़िगरेशन पर निर्भर करता है। कैसिनी (विजुअल स्टूडियो डीबगिंग) के लिए, उन 404 एल्मा द्वारा लॉग इन हो जाते हैं। आईआईएस 6 के लिए, एल्मा उन्हें नहीं देखता है अगर उन्हें रूटिंग द्वारा अनदेखा किया जाता है। मैं आईआईएस 7. –

1

मैं ऊपर कर्ट स्किंडलर के प्रोग्रामेटिक समाधान (बनाम कॉन्फ़िगरेशन) का उपयोग कर रहा था; हालांकि, मैंने देखा है कि गैर HttpExceptions ErrorLog_Filtering ईवेंट हैंडलर में दो बार फेंका हो रहे थे। इससे बचने के लिए, सुनिश्चित करें कि आप GetBaseException विधि पर एक प्रकार-चेक करें। यहां स्निपेट

void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e) 
{ 
    if (e.Exception.GetBaseException() is HttpException) 
    { 
     if (((HttpException)e.Exception.GetBaseException()).GetHttpCode() == 404 
      && ((HttpContext)e.Context).Request.Path == "/favicon.ico") 
     { 
      e.Dismiss(); 
     } 
    } 
} 

कुछ भी नया नहीं है, अगर आप कुछ अजीब व्यवहार देखते हैं तो केवल एक FYI।

धन्यवाद ...

4

यह है कि मेरी वेब अनुप्रयोग एक फ़ेविकॉन अनुरोध कर रहा है नहीं है, यह है कि जब मैं elmah.axd पृष्ठ पर ब्राउज़, ब्राउज़र एक फ़ेविकॉन का अनुरोध करता है।

माना जाता है, यह काम करना चाहिए:

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

लेकिन लगता है क्या, यह नहीं है।

मुझे काम करने के लिए एकमात्र तरीका है मेरी वेब रूट में favicon.ico जोड़ने के लिए। यह मेरी साइट के लिए नहीं है, यह केवल elmah.axd पृष्ठ के लिए है। मार्ग पर कॉल करने की आवश्यकता नहीं है। अनदेखा करें।

यहाँ मेरी फ़ेविकॉन साथ elmah.axd है, और कोई त्रुटि:

elmah with favicon.ico

+2

अरे मैट, आप सुनिश्चित करें कि आप दोनों HttpModule और अपनी ErrorFilter रजिस्टर बनाने की जरूरत है system.web सर्वर मॉड्यूल - और त्रुटि लॉग इन हैंडलर (या कोई अन्य लॉगिंग मॉड्यूल) के बाद उन्हें पंजीकृत होने की आवश्यकता है - यह एक रिवर्स स्टैक है, प्राथमिकता के अनुसार। –

+0

@ मैट एनराइट अच्छी टिप्पणी। – Kuncevic

5

मैं नीचे दिए गए कोड का उपयोग करके त्रुटि को अनदेखा करने ELMAH प्राप्त करने में सक्षम था। आप संभावित रूप से किसी भी अन्य पथ को जोड़ सकते हैं जिसे आप अनदेखा करना चाहते हैं। तकनीकी रूप से ये अलग-अलग परीक्षण हो सकते हैं लेकिन ऑफ मौके पर मैं अपने ऐप से संबंधित भविष्य में अन्य 404 त्रुटियों को अनदेखा करना चाहता हूं, मुझे लगा कि मैं इन समूहों को एक साथ छोड़ दूंगा क्योंकि वे मेरे आवेदन पर निर्भर नहीं हैं और यहां पूरी तरह से हैं मेरी त्रुटि लॉगिंग से अव्यवस्था को हटाने के लिए।

<errorFilter> 
    <test> 
     <or> 
      <and> 
       <equal binding="HttpStatusCode" value="404" type="Int32" /> 
       <equal binding="Context.Request.Path" value="/favicon.ico" type="string" /> 
      </and> 
      <and> 
       <equal binding="HttpStatusCode" value="404" type="Int32" /> 
       <equal binding="Context.Request.Path" value="/robots.txt" type="string" /> 
      </and> 
     </or> 
    </test> 
</errorFilter> 
बेशक

अगर आप इस अपने web.config को अव्यवस्थित आप हमेशा एक समर्पित फाइल करने के लिए बाहर फिल्टर विभाजित सकता है के बारे में चिंतित हैं।

<elmah> 
    <security allowRemoteAccess="1" /> 
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah-sqlserver" /> 
    <errorFilter configSource="elmahFilters.config" /> 
</elmah> 
संबंधित मुद्दे