Сведения об ошибке ведения журнала с помощью ELMAH (C#)

Скотт Митчелл

Модули ведения журнала ошибок и обработчики (ELMAH) предлагают другой подход к ведению журнала ошибок выполнения в рабочей среде. ELMAH — это бесплатная библиотека ведения журнала ошибок с открытым исходным кодом, которая включает такие функции, как фильтрация ошибок и возможность просматривать журнал ошибок на веб-странице, как RSS-канал или скачать его в виде файла с разделителями-запятыми. В этом руководстве описывается загрузка и настройка ELMAH.

Введение

В предыдущем руководстве рассматривается система мониторинга работоспособности ASP.NET, которая предлагает готовую библиотеку для записи широкого спектра веб-событий. Многие разработчики используют мониторинг работоспособности для записи и отправки по электронной почте деталей о необработанных исключениях. Однако у этой системы есть несколько проблемных моментов. В первую очередь, отсутствие какого-либо пользовательского интерфейса для просмотра сведений о зарегистрированных событиях. Если вы хотите увидеть сводку из 10 последних ошибок или просмотреть детали ошибки, которая произошла на прошлой неделе, вам необходимо либо просмотреть базу данных, просканировать папку «Входящие» в электронной почте, либо создать веб-страницу, отображающую информацию из таблицы aspnet_WebEvent_Events.

Другая точка боли сосредоточена на сложности мониторинга здоровья. Так как мониторинг работоспособности можно использовать для записи множества различных событий, а также из-за того, что существуют различные варианты указания о том, как и когда события регистрируются, правильно настроить систему мониторинга работоспособности может быть неустранимой задачей. Наконец, возникают проблемы совместимости. Так как мониторинг работоспособности был добавлен в .NET Framework в версии 2.0, он недоступен для старых веб-приложений, созданных с помощью ASP.NET версии 1.x. Кроме того, SqlWebEventProvider класс, который мы использовали в предыдущем руководстве для записи сведений об ошибках в базу данных, работает только с базами данных Microsoft SQL Server. Необходимо создать пользовательский класс поставщика журналов, если необходимо записать ошибки в альтернативное хранилище данных, например XML-файл или базу данных Oracle.

Альтернативой системе мониторинга работоспособности является модуль ведения журнала ошибок и обработчиков ошибок (ELMAH), бесплатная система ведения журнала ошибок с открытым кодом, созданная Atif Aziz. Наиболее заметным различием между двумя системами является способность ELAMH отображать список ошибок и подробные сведения об определенной ошибке на веб-странице и в качестве RSS-канала. ELMAH проще настроить, чем мониторинг работоспособности, так как он регистрирует только ошибки. Кроме того, ELMAH включает поддержку ASP.NET 1.x, ASP.NET 2.0 и ASP.NET 3.5 приложений и поставляется с различными поставщиками источников журналов.

В этом руководстве описаны шаги, связанные с добавлением ELMAH в приложение ASP.NET. Давайте приступим!

Замечание

Система мониторинга здоровья и ELMAH имеют собственные наборы плюсов и минусов. Я призываю вас попробовать обе системы и решить, что лучше всего подходит для ваших потребностей.

Добавление ELMAH в веб-приложение ASP.NET

Интеграция ELMAH в новое или существующее приложение ASP.NET — это простой и простой процесс, который занимает менее пяти минут. В этой статье описаны четыре простых шага.

  1. Скачайте ELMAH и добавьте сборку в Elmah.dll веб-приложение,
  2. Регистрация HTTP-модулей и обработчика ELMAH в Web.config,
  3. Укажите параметры конфигурации ELMAH и
  4. При необходимости создайте инфраструктуру источника журнала ошибок.

Давайте рассмотрим каждый из этих четырех шагов, по одному за раз.

Шаг 1. Скачивание файлов проекта ELMAH и добавлениеElmah.dllв веб-приложение

ELMAH 1.0 BETA 3 (сборка 10617), последняя версия на момент написания, включена в пакет для скачивания, доступный в этом руководстве. Кроме того, вы можете посетить веб-сайт ELMAH , чтобы получить последнюю версию или скачать исходный код. Извлеките скачивание ELMAH в папку на рабочем столе и найдите файл сборки ELMAH (Elmah.dll).

Замечание

Файл Elmah.dll находится в папке загрузки Bin, которая содержит вложенные папки для разных версий .NET Framework, а также для релизных и отладочных сборок. Используйте релизную сборку для соответствующей версии фреймворка. Например, если вы создаете веб-приложение ASP.NET 3.5, скопируйте Elmah.dll файл из Bin\net-3.5\Release папки.

Затем откройте Visual Studio и добавьте сборку в проект, щелкнув правой кнопкой мыши имя веб-сайта в обозревателе решений и выбрав "Добавить ссылку" в контекстном меню. Откроется диалоговое окно "Добавить ссылку". Перейдите на вкладку "Обзор" и выберите Elmah.dll файл. Это действие добавляет файл в Elmah.dll папку веб-приложения Bin .

Замечание

Тип проекта веб-приложения (WAP) не отображает папку Bin в обозревателе решений. Вместо этого он перечисляет эти элементы в папке "Ссылки".

Сборка Elmah.dll включает классы, используемые системой ELMAH. Эти классы делятся на одну из трех категорий:

  • Модули HTTP — модуль HTTP — это класс, который определяет обработчики событий для HttpApplication событий, таких как Error событие. ELMAH включает несколько модулей HTTP, три из которых являются самыми немецкими:

    • ErrorLogModule — регистрирует необработанные исключения в лог.
    • ErrorMailModule — отправляет сведения об необработанных исключениях в сообщении электронной почты.
    • ErrorFilterModule — применяет фильтры, заданные разработчиком, чтобы определить, какие исключения регистрируются и какие из них игнорируются.
  • Обработчики HTTP — обработчик HTTP — это класс, отвечающий за создание разметки для определенного типа запроса. ELMAH включает обработчики HTTP, которые отображают сведения об ошибках в виде веб-страницы, в виде RSS-канала или в виде файла с разделителями-запятыми (CSV).

  • Источники журналов ошибок — из коробки ELMAH записывает ошибки в память, в базу данных Microsoft SQL Server, в базу данных Microsoft Access, в базу данных Oracle, в XML-файл, в базу данных SQLite или в базу данных Vista DB. Как и архитектура системы мониторинга состояния, архитектура ELMAH была создана с использованием модели поставщиков, что означает, что при необходимости можно создавать и легко интегрировать собственные поставщики источников журналов.

Шаг 2. Регистрация HTTP-модуля и обработчика ELMAH

Elmah.dll Хотя файл содержит модули HTTP и обработчик, необходимые для автоматического регистрации необработанных исключений и отображения сведений об ошибках на веб-странице, они должны быть явно зарегистрированы в конфигурации веб-приложения. Модуль ErrorLogModule HTTP после регистрации подписывается на событие HttpApplicationError. Каждый раз, когда это событие поднимается, ErrorLogModule записывает сведения об исключении в указанный источник журнала. Мы узнаем, как определить источник журнала в следующем разделе "Настройка ELMAH". Фабрика ErrorLogPageFactory обработчика HTTP отвечает за генерацию разметки при просмотре журнала ошибок на веб-странице.

Конкретный синтаксис для регистрации модулей HTTP и обработчиков зависит от веб-сервера, который работает с сайтом. Для сервера разработки ASP.NET и IIS версии 6.0 и более ранних версий от Microsoft, HTTP-модули и обработчики регистрируются в разделах <httpModules>, которые находятся внутри элемента <system.web>. Если вы используете IIS 7.0, они должны быть зарегистрированы в <system.webServer> элементе, в его <modules> и <handlers> разделах. К счастью, вы можете определить модули HTTP и обработчики в обоих местах независимо от используемого веб-сервера. Этот параметр является самым переносимым, так как он позволяет использовать ту же конфигурацию в средах разработки и рабочей среды независимо от используемого веб-сервера.

Начните с регистрации ErrorLogModule модуля HTTP и ErrorLogPageFactory обработчика HTTP в разделе <httpModules> и <httpHandlers> разделе <system.web>. Если конфигурация уже определяет эти два элемента, просто включите <add> элемент для http-модуля и обработчика ELMAH.

<?xml version="1.0"?>
<configuration>
  ...
  
  <system.web>
  ...

  <httpHandlers>
  ...

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

  ...
  </system.web>

  ...
</configuration>

Затем зарегистрируйте http-модуль ELMAH и обработчик в элементе <system.webServer> . Как и раньше, если этот элемент еще не присутствует в конфигурации, добавьте его.

<?xml version="1.0"?>
<configuration>
  ...

  <system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules>
  ...

  <add name="Elmah.ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
  </modules>
  <handlers>
  ...

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

По умолчанию IIS 7 выдает ошибку, если в разделе <system.web> зарегистрированы HTTP-обработчики и модули. Атрибут validateIntegratedModeConfiguration в элементе <validation> предписывает IIS 7 подавлять такие сообщения об ошибках.

Обратите внимание, что синтаксис для регистрации обработчика ErrorLogPageFactory HTTP включает path атрибут, который имеет значение elmah.axd. Этот атрибут сообщает веб-приложению, что если запрос поступает на страницу с именем elmah.axd , запрос должен обрабатываться обработчиком ErrorLogPageFactory HTTP. В дальнейшем в этом руководстве мы увидим ErrorLogPageFactory обработчик HTTP в действии.

Шаг 3. Настройка ELMAH

ELMAH ищет параметры конфигурации в файле веб-сайта Web.config в пользовательском разделе конфигурации с именем <elmah>. Чтобы использовать пользовательский раздел в Web.config, его сначала необходимо определить в элементе <configSections>. Web.config Откройте файл и добавьте в него <configSections> следующую разметку:

<?xml version="1.0" encoding="utf-8"?>
<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"/>
  </sectionGroup>
  </configSections>

  ...
</configuration>

Замечание

Если вы настраиваете ELMAH для приложения ASP.NET 1.x, удалите requirePermission="false" атрибут из <section> указанных выше элементов.

Приведенный выше синтаксис регистрирует настраиваемый <elmah> раздел и его подразделы: <security>, , <errorLog><errorMail>и <errorFilter>.

Затем добавьте <elmah> раздел в Web.config. Этот раздел должен отображаться на том же уровне, что и элемент <system.web>. В разделе <elmah> добавьте разделы <security> и <errorLog> следующим образом:

<?xml version="1.0"?>
<configuration>
  ...

  <elmah>
  <security allowRemoteAccess="0" />
  
  <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ReviewsConnectionString" />
  </elmah>

  ...
</configuration>

<security> Атрибут раздела allowRemoteAccess указывает, разрешен ли удаленный доступ. Если это значение равно 0, веб-страница журнала ошибок может просматриваться только локально. Если этот атрибут имеет значение 1, веб-страница журнала ошибок включена как для удаленных, так и для местных посетителей. Теперь давайте отключим веб-страницу журнала ошибок для удаленных посетителей. Мы позволим удаленному доступу позже после того, как у нас есть возможность обсудить проблемы безопасности, связанные с этим.

В <errorLog> разделе определяется источник журнала ошибок, который определяет, где записываются сведения об ошибке; он аналогичен <providers> разделу в системе мониторинга работоспособности. Приведенный выше синтаксис указывает SqlErrorLog класс в качестве источника журнала ошибок, который записывает ошибки в базу данных Microsoft SQL Server, указанную значением атрибута connectionStringName .

Замечание

ELMAH поставляется с дополнительными поставщиками журналов ошибок, которые можно использовать для записи ошибок в XML-файл, базу данных Microsoft Access, базу данных Oracle и другие хранилища данных. Дополнительные сведения об использовании этих альтернативных поставщиков журналов ошибок см. в примере Web.config файла, включенного в скачивание ELMAH.

Шаг 4. Создание инфраструктуры источника журнала ошибок

Поставщик ELMAH SqlErrorLog регистрирует сведения об ошибках в указанной базе данных Microsoft SQL Server. SqlErrorLog Поставщик ожидает, что эта база данных будет иметь таблицу с именем ELMAH_Error и тремя хранимыми процедурами: ELMAH_GetErrorsXml, ELMAH_GetErrorXmlи ELMAH_LogError. Скачивание ELMAH содержит файл с именем SQLServer.sql в db папке, содержащей T-SQL для создания этой таблицы и этих хранимых процедур. Для использования поставщика SqlErrorLog вам потребуется выполнить эти запросы в вашей базе данных.

На рисунках 1 и 2 показан обозреватель баз данных в Visual Studio после добавления объектов базы данных, необходимых поставщику SqlErrorLog .

Снимок экрана, который показывает журналы ошибок поставщика S Q L, записанные в таблицу.

Рис. 1:SqlErrorLog Поставщик логирует ошибки в ELMAH_Error таблицу

Снимок экрана, на котором показано, как поставщик журнала ошибок S Q L использует три хранимых процедуры.

Рис. 2.SqlErrorLog Поставщик использует три хранимых процедуры

ELMAH в действии

На этом этапе мы добавили ELMAH в веб-приложение, зарегистрировали ErrorLogModule модуль HTTP и ErrorLogPageFactory обработчик HTTP, указали параметры Web.configконфигурации ELMAH и добавили необходимые объекты базы данных для SqlErrorLog поставщика журналов ошибок. Теперь мы готовы увидеть ELMAH в действии! Посетите веб-сайт "Отзывы книг" и посетите страницу, которая создает ошибку среды выполнения, например Genre.aspx?ID=fooили несуществующую страницу, например NoSuchPage.aspx. То, что вы видите при посещении этих страниц, зависит от конфигурации <customErrors> и от того, посещаете ли вы их локально или удаленно. (Обратитесь к руководству по отображению страницы ошибок, заданной пользователем, чтобы освежить знания по этой теме.)

ELMAH не влияет на содержимое, которое отображается пользователю при возникновении необработанного исключения; он просто записывает свои сведения. Этот журнал ошибок доступен на веб-странице elmah.axd от корня вашего веб-сайта, например http://localhost/BookReviews/elmah.axd. (Этот файл физически не существует в проекте, но при получении запроса на elmah.axd, среда выполнения направляет его обработчику HTTP ErrorLogPageFactory, который генерирует разметку, отправляемую обратно в браузер.)

Замечание

Вы также можете использовать страницу elmah.axd для указания ELMAH создать тестовую ошибку. При посещении elmah.axd/test (как http://localhost/BookReviews/elmah.axd/test), ELMAH вызывает исключение типа Elmah.TestException с сообщением об ошибке: "Это тестовое исключение, которое можно безопасно игнорировать".

На рисунке 3 показан журнал ошибок при посещении elmah.axd из среды разработки.

Снимок экрана: отображение журнала ошибок на веб-странице.

Рис. 3.Elmah.axd Отображение журнала ошибок на веб-странице
(Щелкните, чтобы просмотреть изображение полного размера)

Журнал ошибок на рис. 3 содержит шесть записей об ошибках. Каждая запись включает код состояния HTTP (404 или 500 для этих ошибок), тип, описание, имя пользователя, вошедшего в систему при возникновении ошибки, а также дату и время. Щелкнув ссылку "Сведения", отображается страница с тем же сообщением об ошибке, которое отображается на желтом экране смерти (см. рис. 4) вместе со значениями переменных сервера во время ошибки (см. рис. 5). Кроме того, можно просмотреть необработанный XML-код, в котором сохраняются сведения об ошибке, включая дополнительные сведения, такие как значения в заголовке HTTP POST.

Снимок экрана, на котором отображаются сведения об ошибке YSOD.

Рис. 4. Просмотр сведений об ошибке YSOD
(Щелкните, чтобы просмотреть изображение полного размера)

Снимок экрана: значения коллекции переменных сервера.

Рис. 5. Изучение значений коллекции переменных сервера во время ошибки
(Щелкните, чтобы просмотреть изображение полного размера)

Развертывание ELMAH на рабочем веб-сайте подразумевает:

  • Копирование Elmah.dll файла в папку Bin в рабочей среде
  • Копирование параметров конфигурации ELMAH в файл, Web.config используемый в рабочей среде, и
  • Добавление исходной инфраструктуры журнала ошибок в рабочую базу данных.

Мы изучили методы копирования файлов из разработки в рабочую среду в предыдущих руководствах. Возможно, самый простой способ получить инфраструктуру источника ошибок в рабочей базе данных — использовать SQL Server Management Studio для подключения к рабочей базе данных, а затем выполнить SqlServer.sql файл скрипта, который создаст необходимую таблицу и хранимые процедуры.

Просмотр страницы сведений об ошибке в продакшене

После развертывания сайта в рабочей среде посетите рабочий веб-сайт и создайте необработанное исключение. Как и в среде разработки, ELMAH не влияет на страницу ошибки, отображаемую при возникновении необработанного исключения; Вместо этого он просто регистрирует ошибку. Если вы пытаетесь посетить страницу журнала ошибок (elmah.axd) из рабочей среды, вы увидите страницу с надписью "Запрещено", показанную на рис. 6.

Снимок экрана: удаленные посетители не могут просматривать веб-страницу журнала ошибок.

Рис. 6. По умолчанию удаленные посетители не могут просматривать веб-страницу журнала ошибок
(Щелкните, чтобы просмотреть изображение полного размера)

Помните, что в разделе конфигурации <security> ELMAH мы установили атрибут allowRemoteAccess в значение 0, что запрещает удаленным пользователям просматривать журнал ошибок. Важно запретить анонимным посетителям просматривать журнал ошибок, так как сведения об ошибке могут обнаруживать уязвимости системы безопасности или другие конфиденциальные сведения. Если вы решите задать этот атрибут равным 1 и включить удаленный доступ к журналу ошибок, важно заблокировать elmah.axd путь, чтобы только авторизованные посетители могли получить к нему доступ. Это можно сделать, добавив <location> элемент в Web.config файл.

Следующая конфигурация позволяет пользователям в роли администратора получить доступ к веб-странице журнала ошибок:

<?xml version="1.0"?>
<configuration>
  ...

  <elmah>
  <security allowRemoteAccess="1" />
  
  ...
  </elmah>

  ...

  <location path="elmah.axd">
  <system.web>
  <authorization>
  <allow roles="Admin" />
  <deny users="*" />
  </authorization>
  </system.web>  
  </location>
</configuration>

Замечание

Роль администратора и три пользователя в системе — Scott, Jisun и Алиса — добавлены в учебнике по настройке веб-сайта, использующего службы приложений. Пользователи Скотт и Джисун являются членами роли "Admin". Дополнительные сведения о проверке подлинности и авторизации см. в руководствах по безопасности веб-сайтов.

Теперь журнал ошибок в рабочей среде может просматриваться удаленными пользователями; Вернитесь к рисункам 3, 4 и 5 для снимков экрана веб-страницы журнала ошибок. Однако если анонимный или неадминистрируемый пользователь пытается просмотреть страницу журнала ошибок, они автоматически перенаправляются на страницу входа (Login.aspx), как показано на рисунке 7 .

Снимок экрана, на котором показано, как несанкционированные пользователи автоматически перенаправляются на страницу входа.

Рис. 7. Неавторизованные пользователи автоматически перенаправляются на страницу входа
(Щелкните, чтобы просмотреть изображение полного размера)

Программный лог ошибок

Модуль HTTP ELMAH ErrorLogModule автоматически регистрирует необработанные исключения в указанный источник журнала. Кроме того, можно регистрировать ошибку без необходимости вызывать необработанное исключение с помощью ErrorSignal класса и его Raise метода. Метод Raise передает Exception объект и регистрирует его так, как если бы это исключение было создано и достигло среды выполнения ASP.NET без обработки. Однако разница заключается в том, что запрос продолжает выполняться обычно после Raise вызова метода, в то время как возникающее необработанное исключение прерывает обычное выполнение запроса и приводит к тому, что среда выполнения ASP.NET отображает настроенную страницу ошибки.

Класс ErrorSignal полезен в ситуациях, когда существует некоторое действие, которое может завершиться ошибкой, но его сбой не является катастрофическим для общей выполняемой операции. Например, веб-сайт может содержать форму, которая принимает входные данные пользователя, сохраняет его в базе данных, а затем отправляет пользователю сообщение электронной почты, информирующее о том, что они были обработаны. Что должно произойти, если данные сохраняются в базе данных успешно, но при отправке сообщения электронной почты возникает ошибка? Один из вариантов — создать исключение и отправить пользователя на страницу ошибки. Однако это может запутать пользователя в том, что информация, введенная им, не была сохранена. Другой подход заключается в том, чтобы регистрировать ошибку, связанную с электронной почтой, но не изменять взаимодействие пользователя каким-либо образом. Это место, где ErrorSignal класс полезен.

// ... Save user's information to the database ...
...

// Attempt to send the user a confirmation email
try
{
    // ... Send an email ...
}
catch (Exception e)
{
    // Error in sending email. Log it!
    ErrorSignal.FromCurrentContext().Raise(e);
}

Уведомление об ошибках по электронной почте

Наряду с регистрацией ошибок в базе данных, ELMAH также можно настроить для отправки сведений об ошибке по электронной почте указанному получателю. Эта функция предоставляется ErrorMailModule модулем HTTP. Поэтому для отправки сведений об ошибке по электронной почте необходимо зарегистрировать этот модуль Web.config HTTP.

<?xml version="1.0"?>
<configuration>
  ...
  
  <system.web>
  ...

  <httpModules>
  ...
  
  <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
  <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah"/>
  </httpModules>
  </system.web>

  <system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules>
  ...

  <add name="Elmah.ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
  <add name="Elmah.ErrorMail" type="Elmah.ErrorMailModule" preCondition="managedHandler" />
  </modules>
  
  ...
  </system.webServer>
</configuration>

Затем укажите сведения об электронной почте об ошибке в <elmah> разделе элемента <errorMail> , указывая отправителя и получателя электронной почты, тему и асинхронную отправку сообщения электронной почты.

<?xml version="1.0"?>
<configuration>
  ...

  <elmah>
  ...

  <errorMail from="support@example.com"
  to="support@example.com"
  subject="Book Reviews Runtime Error"
  async="true" />
  </elmah>

  ...
</configuration>

При использовании указанных выше параметров при возникновении ошибки среды выполнения ELMAH отправляет сообщение электронной почты support@example.com с подробными сведениями об ошибке. Сообщение об ошибке ELMAH содержит те же сведения, что и на веб-странице сведений об ошибке, а именно сообщение об ошибке, трассировка стека и переменные сервера (см. цифры 4 и 5). Сообщение об ошибке также содержит содержимое "желтого экрана смерти" с подробностями исключения в виде вложения (YSOD.html).

На рисунке 8 показано электронное письмо с ошибкой от ELMAH, созданное путем посещения Genre.aspx?ID=foo. На рис. 8 показан только сообщение об ошибке и трассировка стека, переменные сервера включаются далее в текст электронной почты.

Снимок экрана: можно настроить ELMAH для отправки сведений об ошибке по электронной почте.

Рис. 8. Вы можете настроить ELMAH для отправки сведений об ошибке по электронной почте
(Щелкните, чтобы просмотреть изображение полного размера)

Только ошибки регистрации, представляющие интерес

По умолчанию ELMAH регистрирует сведения обо всех необработанных исключениях, включая 404 и другие ошибки HTTP. Вы можете указать ELMAH игнорировать эти или другие типы ошибок с помощью фильтрации ошибок. Логика фильтрации выполняется HTTP-модулем ELMAH ErrorFilterModule, который необходимо зарегистрировать в Web.config, чтобы использовать логику фильтрации. Правила фильтрации указаны в <errorFilter> разделе.

Следующая разметка указывает ELMAH о том, чтобы не регистрировать ошибки 404.

<?xml version="1.0"?>
<configuration>
  ...

  <elmah>
  ...

  <errorFilter>
  <test>
  <equal binding="HttpStatusCode" value="404" type="Int32" />
  </test>
  </errorFilter>
  </elmah>

  ...
</configuration>

Замечание

Не забывайте, чтобы использовать фильтрацию ошибок, необходимо зарегистрировать ErrorFilterModule модуль HTTP.

Элемент <equal> внутри <test> раздела называется утверждением. Если утверждение принимает значение true, ошибка исключается из журнала ELMAH. Существуют и другие утверждения, включая: <greater>, <greater-or-equal>, <not-equal>, <lesser>и <lesser-or-equal>т. д. Кроме того, можно объединить утверждения с помощью <and><or> логических операторов. Кроме того, можно даже включить простое выражение JavaScript в качестве утверждения или написать собственные утверждения в C# или Visual Basic.

Дополнительные сведения о возможностях фильтрации ошибок ELMAH см. в разделе "Фильтрация ошибок " статьи ELMAH.

Сводка

ELMAH предоставляет простой и мощный механизм для ведения журнала ошибок в веб-приложении ASP.NET. Как и система мониторинга работоспособности Майкрософт, ELMAH может записывать ошибки в базу данных и отправлять сведения об ошибке разработчику по электронной почте. В отличие от системы мониторинга работоспособности, ELMAH включает поддержку более широкого диапазона хранилищ данных журнала ошибок, включая Microsoft SQL Server, Microsoft Access, Oracle, XML-файлы и несколько других. Кроме того, ELMAH предлагает встроенный механизм для просмотра журнала ошибок и сведений об определенной ошибке на веб-странице. elmah.axd Страница elmah.axd также может отображать сведения об ошибках в виде RSS-канала или в виде файла значений, разделенного запятыми (CSV), который можно прочитать с помощью Microsoft Excel. Вы также можете указать ELMAH фильтровать ошибки из журнала с помощью декларативных или программных утверждений. И ELMAH можно использовать с ASP.NET приложениями версии 1.x.

Каждое развернутое приложение должно иметь некоторый механизм для автоматического ведения журнала необработанных исключений и отправки уведомлений группе разработчиков. Выполняется ли это с помощью мониторинга работоспособности или ELMAH, не имеет большого значения. Иными словами, это не имеет большого значения, независимо от того, используете ли вы мониторинг работоспособности или ELMAH; оцените обе системы, а затем выберите тот, который лучше всего соответствует вашим потребностям. Важно, чтобы некоторый механизм был создан для регистрации необработанных исключений в рабочей среде.

Счастливое программирование!

Дальнейшее чтение

Дополнительные сведения о разделах, описанных в этом руководстве, см. в следующих ресурсах: