2016-08-16 2 views
3

У меня есть приложение Web Api, у которого Elmah настроен и работает, журналы создаются нормально.Elmah не фильтрует/intecepting ошибки в web api

Чтобы скрыть/удалить важные данные из журналов, которые я пробовал this, но он не работает для моих веб-контроллеров Api. Фильтр попадает только при возникновении ошибки в конвейере MVC (в проекте есть MVC и Web API-контроллеры).

Я проверил this вопрос тоже, но мой конфигурационный файл, кажется, OK:

<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, журнал все еще создается нормально.

+0

Какие у вас есть ELMAH nuget? – ThomasArdal

+0

elmah 1.2.2, который имеет зависимость от elmah.corelibrary (1.2.2 тоже) –

ответ

4

ELMAH не регистрирует ошибки, сгенерированные ASP.NET Web API, из коробки. Вам нужно установить пакеты Elmah.Contrib.WebApi, а также:

Install-Package Elmah.Contrib.WebApi 

Затем настройте Web API для использования ELMAH в качестве исключения регистраторя в своем WebApiConfig.cs:

config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger()); 

Для получения дополнительной информации, ознакомьтесь руководство Logging to ELMAH from Web API, которое я написал. В учебнике вам нужно будет заменить пакет elmah.io ELMAH, так как вы, вероятно, используете один из других регистраторов ошибок.

Я просто проверил, что установка этих пакетов фактически вызывает код ErrorLog_Filtering, который вы добавили в свой вопрос.

+0

Вот и все, спасибо. Быстрый вопрос: на моем фильтре я вызываю «e.Dismiss()», но еще два файла журнала создаются. Есть еще один способ подавить создание журнала? (Я в основном следую [этим шагам] (https://stackoverflow.com/questions/6628389/in-elmah-with-mvc-3-how-can-i-hide-sensitive-form-data-from-the -error-log)) –

+0

Не удалось ли зарегистрировать ошибку, даже если вы ее отклонили или это некоторые файлы журналов, на которые вы ссылаетесь? – ThomasArdal

+0

Ошибка по-прежнему регистрируется, хотя отклоняется. Мне нужно его отклонить, потому что я создаю его вручную 'ErrorLog.GetDefault (null) .Log (error);' so Он отображает только те данные, которые я хочу. –