Запись в журнал сведений об ошибках с помощью 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 Development Server и служб IIS корпорации Майкрософт версии 6.0 и более ранних версий модули и обработчики HTTP регистрируются в <httpModules> разделах и <httpHandlers> , которые отображаются в элементе <system.web> . Если вы используете IIS 7.0, их необходимо зарегистрировать в <system.webServer> разделах и <handlers> элемента<modules>. К счастью, можно определить 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 жалуется, если в разделе зарегистрированы http-модули и обработчики <system.web> . Атрибут validateIntegratedModeConfiguration в элементе <validation> предписывает СЛУЖБАм IIS 7 подавлять такие сообщения об ошибках.

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

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

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

Примечание

Вы также можете использовать страницу elmah.axd , чтобы указать ELMAH, чтобы создать тестовую ошибку. При посещении elmah.axd/test (как в ) http://localhost/BookReviews/elmah.axd/testELMAH создает исключение типа 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>

Примечание

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

Теперь удаленные пользователи могут просматривать журнал ошибок в рабочей среде. Вернитесь к рисункам 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);
}

Уведомление об ошибке через Email

Наряду с ведением журнала ошибок в базе данных, 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 для отправки сведений об ошибках через Email
(Щелкните для просмотра полноразмерного изображения)

Только ведения журнала интересующих ошибок

По умолчанию 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; оцените обе системы, а затем выберите ту, которая лучше всего соответствует вашим потребностям. Что принципиально важно, так это то, что был создан некоторый механизм для регистрации необработанных исключений в рабочей среде.

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

Дополнительные материалы

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