C# Elmah未过滤/察觉web api上的错误
我有一个Web Api应用程序,它配置了Elmah并正常工作,日志是正常创建的 为了隐藏/删除日志中的敏感数据,我尝试了,但对我的Web Api控制器不起作用。只有当MVC管道中发生错误时(项目中有MVC和WebAPI控制器),才会命中过滤器 我也检查了问题,但我的配置文件似乎还可以:C# Elmah未过滤/察觉web api上的错误,c#,asp.net-web-api,elmah,C#,Asp.net Web Api,Elmah,我有一个Web Api应用程序,它配置了Elmah并正常工作,日志是正常创建的 为了隐藏/删除日志中的敏感数据,我尝试了,但对我的Web Api控制器不起作用。只有当MVC管道中发生错误时(项目中有MVC和WebAPI控制器),才会命中过滤器 我也检查了问题,但我的配置文件似乎还可以: <sectionGroup name="elmah"> <section name="security" requirePermission="false" type="El
<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>
[...]
<location path="." inheritInChildApplications="false">
<system.web>
<httpModules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>
[..]
</system.web>
</location>
[...]
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
</modules>
</system.webServer>
作为附加信息,如果我对system.web>httpModules部分进行注释,日志仍在正常创建。ELMAH不会即时记录ASP.NET web API生成的错误。您还需要安装Elmah.Contrib.WebApi包:
Install-Package Elmah.Contrib.WebApi
然后将Web API配置为在WebApiConfig.cs中使用ELMAH作为异常记录器:
config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger());
有关更多信息,请查看我编写的指南。在本教程中,您需要将elmah.io包替换为,因为您可能正在使用其他错误记录器之一
我刚刚验证了安装这些软件包实际上会触发您添加到问题中的ErrorLog_过滤代码。您使用的是哪个ELMAH nuget软件包?ELMAH 1.2.2,它依赖于ELMAH.corebrary(也有1.2.2),谢谢。一个简短的问题:在我的过滤器上,我调用了“e.discouse()”,但仍在创建两个日志文件。还有另一种方法来抑制日志创建吗?(我基本上如下所述)即使您取消了该错误,还是仍然记录了该错误?还是您正在引用的一些日志文件?即使取消了该错误,仍然记录了该错误。我需要取消它,因为我手动创建它
ErrorLog.GetDefault(null).Log(error)代码>所以它只显示我想要的数据。我以前编写并测试过这个解决方案:是的,它正在工作。问题是应用程序的另一个服务在抛出异常时写入相同的日志。再次感谢您的帮助:)
config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger());