我有一个Web Api应用程序,已配置并正常工作的Elmah,日志正常创建。
为了从日志中隐藏/删除敏感数据,我尝试了这个,但它对我的Web Api控制器不起作用。当MVC管道中发生错误时才会命中过滤器(项目中有MVC和Web API控制器)。
我也查看了这个问题,但我的配置文件似乎是正确的:
作为额外信息,如果我注释掉system.web>httpModules部分,日志仍然会正常创建。
为了从日志中隐藏/删除敏感数据,我尝试了这个,但它对我的Web Api控制器不起作用。当MVC管道中发生错误时才会命中过滤器(项目中有MVC和Web API控制器)。
我也查看了这个问题,但我的配置文件似乎是正确的:
<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>
在Global.asax中的过滤器:
public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
var ctx = e.Context as HttpContext;
if (ctx == null) return;
ElmahDataFilter.Apply(e, ctx);
}
作为额外信息,如果我注释掉system.web>httpModules部分,日志仍然会正常创建。