Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 方框404 ELMAh中的FavIco错误_Logging_Http Status Code 404_Elmah - Fatal编程技术网

Logging 方框404 ELMAh中的FavIco错误

Logging 方框404 ELMAh中的FavIco错误,logging,http-status-code-404,elmah,Logging,Http Status Code 404,Elmah,我注意到ELMAH在我的本地服务器上记录了一个没有为favico找到的404。如何通过过滤器抑制此错误?我还不太熟悉如何配置它。这并不能帮助您了解如何配置ELMAH,但防止404请求favicon的最简单方法是提供一个…官方ELMAH解释了许多抑制404 favicon错误的方法 您可以在web.config中声明性地过滤掉所有404错误,如下所示。我不确定是否有一种方法可以让法维康只超过404 <errorFilter> <test> <e

我注意到ELMAH在我的本地服务器上记录了一个没有为favico找到的404。如何通过过滤器抑制此错误?我还不太熟悉如何配置它。

这并不能帮助您了解如何配置ELMAH,但防止404请求favicon的最简单方法是提供一个…

官方ELMAH解释了许多抑制404 favicon错误的方法

您可以在web.config中声明性地过滤掉所有404错误,如下所示。我不确定是否有一种方法可以让法维康只超过404

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

我个人更喜欢通过web.config声明性地过滤所有404,或者像Joel建议的那样提供favicon。

我只是忽略路由,而不是配置Elmah。这对我很有用:

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

我在使用上面Kurt Schindler的编程解决方案(vs config);但是,我注意到在ErrorLog_过滤事件处理程序中两次抛出非HttpException。为了避免这种情况,请确保对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();
        }
    }
}
这里没有什么新鲜事,如果你碰巧看到一些奇怪的行为,请告诉我


谢谢…

不是我的web应用程序请求一个favicon,而是当我浏览elmah.axd页面时,浏览器请求一个favicon

据推测,这应该是可行的:

<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>

但你猜怎么着,事实并非如此

我发现唯一可行的方法是在我的web根目录中添加一个favicon.ico。这不是为我的网站,它只是为elmah.axd页面。不需要调用route.IgnoreRoute

这是elmah.axd和我的favicon,没有错误:


通过使用下面的代码,我可以让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>


这就可以了,但我不建议过滤所有404错误。这有点限制了艾玛的力量。我更支持Joel的方法,你可以解决问题。哈哈!我只是去了。。哦,是的,我可以添加一个favicon!你确定你真的和ELMAH查过了吗?忽略路线是行不通的。它只会导致MVC忽略该请求,并将其传递到常规ASP.NET管道,该管道会对其进行404处理,从而使其登录到ELMAH。我已经有一段时间没有查看该代码了,因此我需要再次检查,但我在一个实时站点上使用了该技术,它似乎对我有效。IIS6和IIS7之间有区别吗?是否需要它取决于服务器配置。对于Cassini(Visual Studio调试),这些404由Elmah记录。对于IIS 6,如果路由忽略它们,Elmah不会看到它们。我没有测试IIS 7。我最后重新检查了这个,你是对的,它确实被作为404传递。嘿,Matt,你需要确保你在httpModule和system.webServer模块中注册了你的ErrorFilter-并且它们需要在ErrorLog处理程序(或任何其他日志模块)运行后注册-这是一个反向堆栈,优先权。
<elmah>
    <security allowRemoteAccess="1" />
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah-sqlserver" />
    <errorFilter configSource="elmahFilters.config" />
</elmah>