Elmah 不是 filtering/intecepting 网络错误 api
Elmah not filtering/intecepting errors on web api
我有一个 Web Api 应用程序,它配置了 Elmah 并正常工作,日志创建正常。
为了 hide/remove 我尝试 this 日志中的敏感数据,但它不适用于我的 Web Api 控制器。只有在 MVC 管道中发生错误时才会触发过滤器(项目中有 MVC 和 Web API 控制器)。
我也检查了 this 问题,但我的配置文件似乎没问题:
<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 部分,日志仍在正常创建。
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());
有关详细信息,请查看指南 Logging to ELMAH from Web API that I've written. In the tutorial you will need to replace the elmah.io package with ELMAH,因为您可能正在使用其他错误记录器之一。
我刚刚验证了安装这些软件包,实际上触发了您添加到问题中的 ErrorLog_Filtering 代码。
我有一个 Web Api 应用程序,它配置了 Elmah 并正常工作,日志创建正常。
为了 hide/remove 我尝试 this 日志中的敏感数据,但它不适用于我的 Web Api 控制器。只有在 MVC 管道中发生错误时才会触发过滤器(项目中有 MVC 和 Web API 控制器)。
我也检查了 this 问题,但我的配置文件似乎没问题:
<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 部分,日志仍在正常创建。
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());
有关详细信息,请查看指南 Logging to ELMAH from Web API that I've written. In the tutorial you will need to replace the elmah.io package with ELMAH,因为您可能正在使用其他错误记录器之一。
我刚刚验证了安装这些软件包,实际上触发了您添加到问题中的 ErrorLog_Filtering 代码。