문제

상자에서 Elmah가 로컬 서버에서 Favico에 대해 찾을 수없는 404를 기록한 것을 발견했습니다. 필터를 통해이 오류를 어떻게 억제합니까? 아직 구성에 익숙하지 않습니다 ..

도움이 되었습니까?

해결책

공식 엘마 오류 필터링 페이지 이 404 Favicon 오류가 억압 될 수있는 여러 가지 방법을 설명합니다.

필터링 할 수 있습니다 모두 404 Web.config에서 선언적으로 오류가 있습니다. 그래도 파비콘을 위해 404만을 압박 할 수있는 방법이 있는지 확실하지 않습니다.

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

프로그래밍 방식으로 수행하려면 공식 문서에 설명 된대로 ErrorLog 또는 ErrorEmail 필터링 이벤트의 오류를 기각 할 수 있습니다. 아래 코드는 약간 과잉이지만 필터링 방법을 보여줍니다. /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를 필터링하거나 Joel이 제안한 것처럼 favicon을 제공하는 것을 선호합니다.

다른 팁

Elmah를 구성하는 방법을 배우는 데 도움이되지 않지만 Favicon 요청에 대한 404를 방지하는 가장 쉬운 방법은 하나를 제공하는 것입니다.

아래 코드를 사용하여 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>

내 웹 애플리케이션이 파비콘을 요청하는 것이 아니라 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 페이지에만 해당됩니다. Route.ignorerOute를 호출 할 필요가 없습니다.

여기 내 favicon이있는 Elmah.axd는 오류가 없습니다.

elmah with favicon.ico

Elmah를 구성하기보다는 경로를 무시합니다. 이것은 나를 위해 작동합니다 :

routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});

위의 Kurt Schindler의 프로그래밍 방식 솔루션 (vs config)을 사용하고있었습니다. 그러나 ErrorLog_Filtering 이벤트 핸들러에서 비 HTTPExceptes가 두 번 던져지고 있음을 알았습니다. 이를 피하려면 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();
        }
    }
}

이상한 행동을 보게된다면 여기에 새로운 것은 없습니다.

감사...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top