Cav*_*rob 8 logging elmah http-status-code-404
我注意到开箱即用,ELMAH在我的本地服务器上记录了找不到404的favico.如何通过过滤器抑制此错误?我对配置它还不是很熟悉..
Kur*_*ler 18
官方elmah 错误过滤页面解释了可以抑制此404 favicon错误的多种方法.
您可以在web.config中以声明方式过滤掉所有 404错误.我不确定有没有办法只为PERicon压制404.
<errorFilter>
<test>
<equal binding="HttpStatusCode" value="404" type="Int32" />
</test>
</errorFilter>
Run Code Online (Sandbox Code Playgroud)
如果您想以编程方式执行此操作,则可以忽略ErrorLog或ErrorEmail过滤事件中的错误,如官方文档中所述.下面的代码是有点矫枉过正,但它表明你怎么可以过滤掉仅 404错误的/favicon.ico请求.
void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
if (((HttpException)e.Exception.GetBaseException()).GetHttpCode() == 404
&& ((HttpContext)e.Context).Request.Path == "/favicon.ico")
{
e.Dismiss();
}
}
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢通过web.config以声明方式过滤所有404,或者只提供像Joel建议的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>
Run Code Online (Sandbox Code Playgroud)
当然,如果您担心这会使您的web.config混乱,您可以随时将过滤器拆分为专用文件.
<elmah>
<security allowRemoteAccess="1" />
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah-sqlserver" />
<errorFilter configSource="elmahFilters.config" />
</elmah>
Run Code Online (Sandbox Code Playgroud)