Elmah: обработчик события ErrorLog_Filtering не вызывается в IIS7 - PullRequest
2 голосов
/ 03 сентября 2010

Я включаю фильтрацию журнала ошибок в Elmah и хочу сделать это программно в обработчике событий ErrorLog_Filtering. Он хорошо работает на сервере разработки Visual Studio, но как только я перехожу под IIS7 (локальный на моем компьютере разработчика или удаленный на моем веб-сервере), обработчик не вызывается (регистрация ошибок работает хорошо).

Вот мой обычный web.config:

<configuration>

  <configSections>

    <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" />
      <section name="errorTweet" requirePermission="false" type="Elmah.ErrorTweetSectionHandler, Elmah" />
    </sectionGroup>
  </configSections>

  <elmah>
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ShopMvcConnectionString" />
  </elmah>

  <system.web>

    <httpHandlers>
      <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
    </httpHandlers>

    <httpModules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    </httpModules>

  </system.web>

  <system.webServer>

    <modules runAllManagedModulesForAllRequests="true">
      <add name="Elmah.ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
      <add name="Elmah.ErrorFilter" type="Elmah.ErrorFilterModule" preCondition="managedHandler" />
    </modules>

    <handlers>
      <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
    </handlers>
  </system.webServer>

</configuration>

и мой обработчик в Global.asax:

public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
}

1 Ответ

8 голосов
/ 15 октября 2010

Причина, по которой ваш обработчик не вызывается в IIS 7, заключается в том, что вы назвали модуль по-другому. Вы назвали его ErrorLog в system.web/httpModules, а затем Elmah.ErrorLog в system.webServer/modules.

Обработка событий модуля в Global.asax работает в соответствии с соглашением об именах, где обработчик событий должен быть назван в честь имени модуля, найденного в конфигурации, за которым следует подчеркивание (_), за которым следует название события. ErrorLog_Filtering в порядке и соответствует зарегистрированному имени под system.web/httpModules и выбирается Visual Studio Development Server . Вам просто нужно убедиться, что вы сопоставляете все имена, и это должно работать в обеих средах.

См. Также: Программно зарегистрировать ошибку и отправить электронное письмо

...