ELMAH でエラーの詳細をログに記録する (C#)

作成者: Scott Mitchell

エラー ログ モジュールとハンドラー (ELMAH) は、運用環境でランタイム エラーをログに記録するためのもう 1 つの方法を提供します。 ELMAH は、エラー フィルター処理などの機能や、エラー ログを Web ページから RSS フィードとして表示し、またはコンマ区切りファイルとしてダウンロードする機能を含む、無料のオープン ソース のエラー ログ ライブラリです。 このチュートリアルでは、ELMAH のダウンロードと構成について説明します。

はじめに

前のチュートリアル では ASP.NET の稼働状況の監視システムについて確認しました。さまざまな Web イベントを記録するためのすぐに使用できるライブラリを提供します。 多くの開発者は、稼働状況の監視を使用して、ハンドルされない例外の詳細をログに記録してメールで送信します。 しかし、このシステムにはいくつかの問題点があります。 まず第一に、ログに記録されたイベントに関する情報を表示するためのユーザー インターフェイスが不足しています。 最後の 10 件のエラーの概要を表示する場合、または先週発生したエラーの詳細を表示する場合は、データベースを徹底的に検索するか、メール受信トレイをスキャンするか、aspnet_WebEvent_Events テーブルの情報を表示する Web ページを作成する必要があります。

もう 1 つの問題は、稼働状況の監視の複雑さを中心にしています。 稼働状況の監視を使用してさまざまなイベントを多数記録できるため、また、イベントのログ記録方法とタイミングを指示するためのさまざまなオプションがあるため、稼働状況の監視システムを正しく構成することは、厄介なタスクになる可能性があります。 最後に、互換性の問題があります。 稼働状況の監視はバージョン 2.0 で .NET Framework に最初に追加されたため、ASP.NET バージョン 1.x を使用してビルドされた古い Web アプリケーションでは使用できません。 さらに、前のチュートリアルでエラーの詳細をデータベースにログに記録するために使用した SqlWebEventProvider クラスは、Microsoft SQL Server データベースでのみ機能します。 XML ファイルや Oracle データベースなどの代替データ ストアにエラーを記録する必要がある場合は、カスタム ログ プロバイダー クラスを作成する必要があります。

稼働状況の監視システムの代わりに、Atif Aziz が作成したオープン ソースの無料のエラー ログ システムであるエラー ログ モジュールとハンドラー (ELMAH) があります。 2 つのシステムの最も顕著な違いは、エラーの一覧表示と、Web ページからの特定のエラーの詳細を RSS フィードとして表示する ELAMH の機能です。 ELMAH は、エラーのみをログに記録するため、稼働状況の監視よりも簡単に構成できます。 さらに、ELMAH には、ASP.NET 1.x、ASP.NET 2.0、ASP.NET 3.5 アプリケーションのサポートが含まれており、さまざまなログ ソース プロバイダーに付属しています。

このチュートリアルでは、ASP.NET アプリケーションに ELMAH を追加する手順について説明します。 それでは始めましょう。

Note

稼働状況の監視システムと ELMAH の両方に、独自の長所と短所のセットがあります。 両方のシステムを試して、ニーズに最も適したものを決定することをお勧めします。

ASP.NET Web アプリケーションへ ELMAH を追加する

ELMAH を新規または既存の ASP.NET アプリケーションに統合することは、5 分以内の簡単で簡単なプロセスです。 簡単に言うと、次の 4 つの簡単な手順が含まれます:

  1. ELMAH をダウンロードし、Elmah.dll アセンブリを Web アプリケーションに追加します、
  2. ELMAH の HTTP モジュールとハンドラーを Web.config に登録します、
  3. ELMAH の構成オプションを指定し、
  4. 必要に応じて、エラー ログ ソース インフラストラクチャを作成します。

これら 4 つの各手順を 1 つずつ説明しましょう。

手順 1: ELMAH プロジェクト ファイルをダウンロードし、Web アプリケーションに Elmah.dll を追加する

ELMAH 1.0 BETA 3 (ビルド 10617) は、このチュートリアルで利用可能なダウンロードに含まれています。 または、ELMAH Web サイトにアクセスして、最新バージョンを入手し、ソース コードをダウンロードできます。 デスクトップ上のフォルダーに ELMAH ダウンロードを展開し、ELMAH アセンブリ ファイル (Elmah.dll) を見つけます。

Note

Elmah.dll ファイルはダウンロードの Bin フォルダーにあります。このフォルダーには、さまざまな .NET Framework バージョンとリリース ビルドとデバッグ ビルド用のサブフォルダーがあります。 適切なフレームワーク バージョンにリリース ビルドを使用します。 たとえば、ASP.NET 3.5 Web アプリケーションをビルドする場合は、Bin\net-3.5\Release フォルダーから Elmah.dll ファイルをコピーします。

次に、Visual Studio を開き、ソリューション エクスプローラーで Web サイト名を右クリックし、コンテキスト メニューから [参照の追加] を選択して、アセンブリをプロジェクトに追加します。 [参照の追加] ダイアログ ボックスが表示されます。 [参照] タブに移動し、Elmah.dll ファイルを選択します。 このアクションにより、Elmah.dll ファイルが Web アプリケーションの Bin フォルダーに追加されます。

Note

Web アプリケーション プロジェクト (WAP) の種類には、ソリューション エクスプローラーに Bin フォルダーが表示されません。 代わりに、[参照] フォルダーの下にこれらの項目が一覧表示されます。

Elmah.dll アセンブリには、ELMAH システムで使用されるクラスが含まれています。 これらのクラスは、次の 3 つのカテゴリのいずれかに分類されます:

  • HTTP モジュール - HTTP モジュールは、Error イベントなどの HttpApplication イベントのイベント ハンドラーを定義するクラスです。 ELMAH には複数の HTTP モジュールが含まれています。最も関連性高いのは次の 3 つです:

    • ErrorLogModule - ハンドルされない例外をログ ソースに記録します。
    • ErrorMailModule - ハンドルされない例外の詳細をメール メッセージで送信します。
    • ErrorFilterModule - 開発者が指定したフィルターを適用して、ログに記録されると無視される例外を決定します。
  • HTTP ハンドラー - HTTP ハンドラーは、特定の種類の要求のマークアップを生成するクラスです。 ELMAH には、エラーの詳細を Web ページ、RSS フィード、またはコンマ区切りファイル (CSV) としてレンダリングする HTTP ハンドラーが含まれています。

  • エラー ログ ソース - すぐに使用できる ELMAH では、メモリ、Microsoft SQL Server データベース、Microsoft Access データベース、Oracle データベース、XML ファイル、SQLite データベース、Vista DB データベースにエラーを記録できます。 稼働状況の監視システムと同様に、ELMAH のアーキテクチャはプロバイダー モデルを使用して構築されています。つまり、必要に応じて、独自のカスタム ログ ソース プロバイダーを作成してシームレスに統合できます。

手順 2: ELMAH の HTTP モジュールとハンドラーの登録

Elmah.dll ファイルには、ハンドルされない例外を自動的にログに記録し、Web ページからエラーの詳細を表示するために必要な HTTP モジュールとハンドラーが含まれていますが、これらは Web アプリケーションの構成に明示的に登録する必要があります。 ErrorLogModule HTTP モジュールは、登録されると、HttpApplicationError イベントをサブスクライブします。 このイベントが発生するたびに、ErrorLogModule は例外の詳細を指定されたログ ソースに記録します。 ログ ソース プロバイダーを定義する方法については、次のセクション「ELMAH の構成」を参照してください。ErrorLogPageFactory HTTP ハンドラー ファクトリは、Web ページからエラー ログを表示するときにマークアップを生成する役割を担います。

HTTP モジュールとハンドラーを登録するための具体的な構文は、サイトをサポートする Web サーバーによって異なります。 ASP.NET 開発サーバーおよび Microsoft の IIS バージョン 6.0 以前の場合、HTTP モジュールとハンドラーは、<system.web> 要素内に表示される <httpModules> および <httpHandlers> セクションに登録されます。 IIS 7.0 を使用している場合は、<system.webServer> 要素の <modules><handlers> セクションに登録する必要があります。 幸いにも、使用されている Web サーバーに関係なく、両方の場所で HTTP モジュールとハンドラーを定義できます。 このオプションは、使用されている Web サーバーに関係なく、開発環境と運用環境で同じ構成を使用できるため、最も移植可能なオプションです。

まず、ErrorLogModule HTTP モジュールと ErrorLogPageFactory HTTP ハンドラーを <system.web><httpModules> および <httpHandlers>セクションに登録します。 構成でこれら 2 つの要素が既に定義されている場合は、ELMAH の HTTP モジュールとハンドラーの <add> 要素を含めるだけです。

<?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>

次に、ELMAH の HTTP モジュールとハンドラーを <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>

既定では、HTTP モジュールとハンドラーが <system.web> セクションに登録されている場合、IIS 7 は文句を言います。 <validation> 要素の validateIntegratedModeConfiguration 属性は、このようなエラー メッセージを抑制するように IIS 7 に指示します。

ErrorLogPageFactory HTTP ハンドラーを登録するための構文には、elmah.axd に設定された path属性が含まれていることに注意してください。 この属性は、elmah.axd という名前のページに対する要求が到着した場合は、ErrorLogPageFactory HTTP ハンドラーによって要求を処理する必要があることを Web アプリケーションに通知します。 このチュートリアルの後半で、ErrorLogPageFactory HTTP ハンドラーの動作を確認します。

手順 3: ELMAH の構成

EL MAH は、Web サイトの 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>

Note

ASP.NET 1.x アプリケーション用に ELMAH を構成する場合は、上記の <section> 要素から requirePermission="false" 属性を削除します。

上記の構文では、カスタム <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 に設定されている場合、エラー ログ Web ページはローカルでのみ表示できます。 この属性が 1 に設定されている場合、リモート訪問者とローカル 訪問者の両方に対してエラー ログ Web ページが有効になります。 ここでは、リモート 訪問者のエラー ログ Web ページを無効にしましょう。 リモート アクセスは、後でセキュリティ上の問題について話し合う機会を得た後に許可します。

<errorLog> セクションでは、エラー ログ ソースを定義します。エラーの詳細を記録する場所を指定します。これは、稼働状況の監視システムの <providers> セクションに似ています。 上記の構文では、エラー ログ ソースとして SqlErrorLog クラスを指定します。エラーは、connectionStringName 属性値で指定された Microsoft SQL Server データベースに記録されます。

Note

ELMAH には、XML ファイル、Microsoft Access データベース、Oracle データベース、およびその他のデータ ストアにエラーを記録するために使用できる追加のエラー ログ プロバイダーが付属しています。 これらの代替エラー ログ プロバイダーの使用方法については、ELMAH ダウンロードに含まれているサンプル Web.config ファイルを参照してください。

手順 4: エラー ログ ソース インフラストラクチャの作成

ELMAH の SqlErrorLog プロバイダーは、指定された Microsoft SQL Server データベースにエラーの詳細を記録します。 SqlErrorLog プロバイダーは、このデータベースに ELMAH_Error という名前のテーブルと、ELMAH_GetErrorsXmlELMAH_GetErrorXml、および ELMAH_LogError の 3 つのストアド プロシージャがあることを想定しています。 ELMAH のダウンロードには、このテーブルとこれらのストアド プロシージャを作成するための T-SQL を含む db フォルダーに SQLServer.sql という名前のファイルが含まれています。 SqlErrorLog プロバイダーを使用するには、データベースでこれらのステートメントを実行する必要があります。

図 12 は、SqlErrorLog プロバイダーで必要なデータベース オブジェクトが追加された後の Visual Studio のデータベース エクスプローラーを示しています。

Screenshot that shows the S Q L Error Log provider logs errors written to the table.

図 1: SqlErrorLog プロバイダーがエラーを ELMAH_Error テーブルに記録する

Screenshot that shows how the S Q L Error Log provider uses three stored procedures.

図 2: SqlErrorLog プロバイダーが 3 つのストアド プロシージャを使用する

動作中の ELMAH

この時点で、WEB アプリケーションに ELMAH を追加し、ErrorLogModule HTTP モジュールと ErrorLogPageFactory HTTP ハンドラーを登録し、Web.config で ELMAH の構成オプションを指定し、SqlErrorLog エラー ログ プロバイダーに必要なデータベース オブジェクトを追加しました。 ELMAH の動作を確認する準備ができました。 本のレビュー Web サイトにアクセスし、実行時エラーを生成するページ (Genre.aspx?ID=foo など) または存在しないページ (NoSuchPage.aspx など) にアクセスします。 これらのページにアクセスするときに表示される内容は、<customErrors> の構成と、ローカルまたはリモートのどちらにアクセスしているかによって異なります。 (このトピックの更新プログラムについては、「カスタム エラー ページの表示 チュートリアル」を参照してください)。

ELMAH は、ハンドルされない例外が発生したときにユーザーに表示されるコンテンツには影響しません。その詳細をログに記録するだけです。 このエラー ログは、Web サイトのルートから elmah.axd Web ページからアクセスできます (http://localhost/BookReviews/elmah.axd など)。 (このファイルはプロジェクトに物理的には存在しませんが、elmah.axd 要求が入ると、ランタイムによって ErrorLogPageFactory HTTP ハンドラーにディスパッチされ、ブラウザーに送り返されるマークアップが生成されます)。

Note

elmah.axd ページを使用して、テスト エラーを生成するように ELMAH に指示することもできます。 elmah.axd/test (http://localhost/BookReviews/elmah.axd/test と同様) にアクセスすると、ELMAH は Elmah.TestException 型の例外をスローします。これには、"これは安全に無視できるテスト例外です" というエラー メッセージが表示されます。

図 3 は、開発環境から elmah.axd にアクセスするときのエラー ログを示しています。

Screenshot that shows how the error log displays from a web page.

図 3: Elmah.axd Web ページからエラー ログを表示する
(クリックするとフルサイズの画像が表示されます)

図 3 のエラー ログには、6 つのエラー エントリが含まれています。 各エントリには、HTTP 状態コード (これらのエラーの場合は 404 または 500)、種類、説明、エラーが発生したときにログオンしたユーザーの名前、および日付と時刻が含まれます。 [詳細] リンクをクリックすると、エラーの詳細 (図 4 を参照) に表示されているエラー メッセージと、エラー時のサーバー変数の値 (図 5 を参照) と同じエラー メッセージが含まれるページが表示されます。 エラーの詳細が保存されている生の XML を表示することもできます。これには、HTTP POST ヘッダーの値などの追加情報が含まれます。

Screenshot that displays the error details YSOD.

図 4: エラーの詳細 YSOD を表示する
(クリックするとフルサイズの画像が表示されます)

Screenshot that shows the values of the server variables collection.

図 5: エラー時のサーバー変数コレクションの値を調べる
(クリックするとフルサイズの画像が表示されます)

運用 Web サイトに ELMAH を展開するには、次の作業が必要です:

  • Elmah.dll ファイルを運用環境の Bin フォルダーにコピーして、
  • ELMAH 固有の構成設定を、運用環境で使用される Web.config ファイルにコピーして、
  • 実稼働データベースへのエラー ログ ソース インフラストラクチャを追加します。

前のチュートリアルでは、開発から運用環境にファイルをコピーする手法について説明しました。 運用データベースでエラー ログ ソース インフラストラクチャを取得する最も簡単な方法は、SQL Server Management Studio を使用して運用データベースに接続し、SqlServer.sql スクリプト ファイルを実行することです。これにより、必要なテーブルとストアド プロシージャが作成されます。

運用環境でのエラーの詳細ページの表示

サイトを運用環境に展開した後、運用 Web サイトにアクセスし、ハンドルされない例外を生成します。 開発環境と同様に、ELMAH は、ハンドルされない例外が発生したときに表示されるエラー ページには影響しません。代わりに、エラーをログに記録するだけです。 運用環境からエラー ログ ページ (elmah.axd) にアクセスしようとすると、図 6 に示されている禁止ページに表示されます。

Screenshot that shows that remote visitors can't view the error log web page.

図 6: 既定では、リモート訪問者はエラー ログ Web ページを表示できません
(クリックするとフルサイズの画像が表示されます)

ELMAH 構成の <security> セクションでは、リモート ユーザーがエラー ログを allowRemoteAccess 表示できないように属性を 0 に設定したことを思い出してください。 エラーの詳細によってセキュリティの脆弱性やその他の機密情報が明らかにされる可能性があるため、匿名の訪問者がエラー ログを表示できないようにすることが重要です。 この属性を 1 に設定し、エラー ログへのリモート アクセスを有効にする場合は、承認された訪問者のみがアクセスできるように、elmah.axd パスをロックダウンすることが重要です。 これは Web.config ファイルに <location> 要素を追加することで実現できます。

次の構成では、管理者ロールのユーザーのみがエラー ログ Web ページにアクセスできます。

<?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>

Note

システムの管理者ロールと 3 人のユーザー (Scott、Jisun、Alice) は、「Application Services を使用する Web サイトの構成 チュートリアル」に追加されました。 ユーザー Scott と Jisun は、管理ロールのメンバーです。 認証と承認の詳細については、「Web サイトセキュリティ チュートリアル」を参照してください。

運用環境のエラー ログをリモート ユーザーが表示できるようになりました。エラー ログ Web ページのスクリーン ショットについては、 図 345 を参照してください。 ただし、匿名または管理者以外のユーザーがエラー ログ ページを表示しようとすると、図 7 が示すように、ログイン ページ (Login.aspx) 自動的にリダイレクトされます。

Screenshot that shows how unauthorized users are automatically redirected to the login page.

図 7: 承認されていないユーザーがログイン ページに自動的にリダイレクトされる
(クリックするとフルサイズの画像が表示されます)

プログラムによるエラーのログ記録

ELMAH の ErrorLogModule HTTP モジュールは、指定されたログ ソースにハンドルされない例外を自動的に記録します。 または、ErrorSignal クラスとその Raise メソッドを使用して、未処理の例外を発生させずにエラーをログに記録することもできます。 Raise メソッドは、Exception オブジェクトを渡し、その例外がスローされ、処理されずに ASP.NET ランタイムに到達したかのようにログに記録します。 ただし、違いは、Raise メソッドが呼び出された後も要求が正常に実行され続けるのに対し、スローされた未処理の例外によって要求の通常の実行が中断され、ASP.NET ランタイムに構成済みのエラー ページが表示される点です。

ErrorSignal クラスは、何らかのアクションが失敗する可能性があるが、その失敗が実行されている全体的な操作に致命的ではない状況で役立ちます。 たとえば、Web サイトには、ユーザーの入力を受け取り、データベースに格納した後、ユーザーに情報が処理されたことを知らせるメールを送信するフォームが含まれている場合があります。 情報がデータベースに正常に保存されたが、メール メッセージの送信時にエラーが発生した場合はどうなるでしょうか。 1 つのオプションは、例外をスローし、ユーザーをエラー ページに送信することです。 ただし、入力した情報が保存されていないとユーザーが思い込む可能性があります。 もう 1 つの方法は、メール関連のエラーをログに記録することですが、ユーザーのエクスペリエンスは何も変更しません。 ここでは、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 モジュールによって提供されます。そのため、エラーの詳細をメールで送信するには、この HTTP モジュールを Web.config に登録する必要があります。

<?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 のエラー メールには、エラーの詳細 Web ページに示されているのと同じ情報、つまり、エラー メッセージ、スタック トレース、およびサーバー変数が含まれます (図 45 を参照)。 エラー メールには、例外の詳細の黄色い画面のコンテンツも添付ファイル (YSOD.html) として含まれています。

図 8 は、Genre.aspx?ID=foo にアクセスして生成された ELMAH のエラー メールを示しています。 図 8 はエラー メッセージとスタック トレースのみを示していますが、サーバー変数はメールの本文の下にさらに含まれます。

Screenshot that shows that you can configure ELMAH to send error details via email.

図 8: エラーの詳細をメールで送信するように ELMAH を構成できます
(クリックするとフルサイズの画像が表示されます)

関心のあるエラーのみをログに記録する

既定では、ELMAH は、404 やその他の HTTP エラーを含むすべての未処理の例外の詳細をログに記録します。 エラー フィルターを使用して、これらのエラーやその他の種類のエラーを無視するように ELMAH に指示できます。 フィルター処理ロジックは、ELMAH の ErrorFilterModule HTTP モジュールによって実行されます。フィルター処理ロジックを使用するには、Web.config に登録する必要があります。 フィルター処理の規則は、<errorFilter> セクションで指定します。

次のマークアップは、404 エラーをログに記録しないように ELMAH に指示します。

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

  <elmah>
  ...

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

  ...
</configuration>

Note

エラー フィルタリングを使用するには、ErrorFilterModule HTTP モジュールを登録する必要があります。

<test> セクション内の <equal> 要素はアサーションと呼ばれます。 アサーションが true と評価された場合、エラーは ELMAH のログからフィルター処理されます。 他にも、<greater><greater-or-equal><not-equal><lesser><lesser-or-equal> などのアサーションがあります。 <and><or> ブール演算子を使用してアサーションを組み合わせることもできます。 さらに、単純な JavaScript 式をアサーションとして含めたり、C# や Visual Basic で独自のアサーションを記述したりすることもできます。

ELMAH のエラー フィルタリング機能の詳細については、ELMAH の記事の「エラー フィルタリング セクション」を参照してください。

まとめ

ELMAH は、ASP.NET Web アプリケーションでエラーをログに記録するためのシンプルで強力なメカニズムを提供します。 Microsoft の稼働状況の監視システムと同様に、ELMAH はエラーをデータベースに記録し、エラーの詳細をメールで開発者に送信できます。 稼働状況の監視システムとは異なり、ELMAH には、Microsoft SQL Server、Microsoft Access、Oracle、XML ファイルなど、さまざまなエラー ログ データ ストアがすぐにサポートされています。 さらに、ELMAHは、エラーログと Webページ、elmah.axd、からの特定のエラーに関する詳細を表示するための組み込みのメカニズムを提供します。 elmah.axd ページでは、エラー情報を RSS フィードまたはコンマ区切り値ファイル (CSV) としてレンダリングすることもできます。このファイルは、Microsoft Excel を使用して読み取ることができます。 宣言型アサーションまたはプログラム式アサーションを使用してログからエラーをフィルター処理するように ELMAH に指示することもできます。 ELMAH は、ASP.NET バージョン 1.x アプリケーションで使用できます。

デプロイされたすべてのアプリケーションには、ハンドルされない例外を自動的にログに記録し、開発チームに通知を送信するためのメカニズムが必要です。 これが稼働状況の監視を使用して実現されるか、ELMAH がセカンダリであるか。 言い換えると, 稼働状況の監視か ELMAH を使用することは問題ではりません。両方のシステムを評価し、ニーズに最も適したものを選択してください。 基本的に重要なのは、運用環境でハンドルされない例外をログに記録するためのメカニズムを用意することです。

プログラミングに満足!

もっと読む

この記事で説明したトピックの詳細については、次のリソースを参照してください。