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

作成者: Scott Mitchell

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

はじめに

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

もう 1 つの問題点は、正常性の監視の複雑さを中心にしています。 正常性の監視を使用してさまざまなイベントの多くを記録でき、イベントのログ記録方法とタイミングを指示するためのさまざまなオプションがあるため、正常性監視システムを正しく構成することは、厄介なタスクになる可能性があります。 最後に、互換性の問題があります。 正常性監視はバージョン 2.0 の.NET Frameworkに最初に追加されたため、バージョン 1.x ASP.NET 使用して構築された古い 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 アプリケーションのサポートが含まれており、さまざまなログ ソース プロバイダーに付属しています。

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

注意

正常性監視システムと 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) を見つけます。

注意

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

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

注意

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

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

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

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

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

まず、 の ErrorLogModule および セクション<system.web>ErrorLogPageFactory HTTP モジュールと HTTP ハンドラーを<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 モジュールとハンドラーが セクションに登録されている場合、IIS 7 は不平を <system.web> 言います。 要素の 属性は validateIntegratedModeConfiguration<validation> このようなエラー メッセージを抑制するように IIS 7 に指示します。

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

手順 3: ELMAH の構成

ELMAH は、 という名前<elmah>のカスタム構成セクションで、Web サイトのWeb.configファイルでその構成オプションを検索します。 でカスタム セクションを使用するには、 要素で 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>

注意

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

上記の構文では、カスタム <elmah> セクションとそのサブセクション (、<errorLog><errorMail>、および<errorFilter>) <security>が登録されます。

次に、 セクションを <elmah>Web.config追加します。 このセクションは、 要素と同じレベルで <system.web> 表示されます。 セクション内に、 <elmah> セクションと <errorLog> セクションを次のように追加<security>します。

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

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

  ...
</configuration>

セクションの allowRemoteAccess 属性は<security>、リモート アクセスが許可されているかどうかを示します。 この値が 0 に設定されている場合、エラー ログ Web ページはローカルでのみ表示できます。 この属性が 1 に設定されている場合、リモート訪問者とローカル訪問者の両方に対してエラー ログ Web ページが有効になります。 ここでは、リモート訪問者のエラー ログ Web ページを無効にしましょう。 セキュリティ上の懸念事項について話し合う機会があれば、後でリモート アクセスを許可します。

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

注意

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

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

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

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

テーブルに書き込まれた S Q L エラー ログ プロバイダーのログ エラーを示すスクリーンショット。

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

S Q L エラー ログ プロバイダーが 3 つのストアド プロシージャを使用する方法を示すスクリーンショット。

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

動作中の ELMAH

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

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

注意

ページを elmah.axd 使用して、テスト エラーを生成するように ELMAH に指示することもできます。 にアクセスすると elmah.axd/testhttp://localhost/BookReviews/elmah.axd/testELMAH は 型の例外をスローします。この例外 Elmah.TestExceptionには、"これは無視しても問題ありません" というエラー メッセージが表示されます。

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

Web ページからのエラー ログの表示方法を示すスクリーンショット。

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

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

エラーの詳細 YSOD を表示するスクリーンショット。

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

サーバー変数コレクションの値を示すスクリーンショット。

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

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

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

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

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

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

リモート訪問者がエラー ログ Web ページを表示できないことを示すスクリーンショット。

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

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

次の構成では、管理 ロールのユーザーのみがエラー ログ 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>

注意

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

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

承認されていないユーザーがログイン ページに自動的にリダイレクトされる方法を示すスクリーンショット。

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

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

ELMAH の ErrorLogModule HTTP モジュールは、指定されたログ ソースに未処理の例外を自動的に記録します。 または、 クラスとそのRaiseメソッドを使用して、ハンドルされない例外を発生させずにエラーをログにErrorSignal記録することもできます。 メソッドは 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);
}

Emailを使用したエラー通知

ELMAH は、データベースへのエラーのログ記録と共に、指定された受信者にエラーの詳細を電子メールで送信するように構成することもできます。 この機能は HTTP モジュールによって ErrorMailModule 提供されるため、エラーの詳細を電子メールで 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>

次に、要素<errorMail>の セクションでエラー メールに関する情報を<elmah>指定します。この情報は、メールの送信者と受信者、件名、およびメールが非同期的に送信されるかどうかを示します。

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

  <elmah>
  ...

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

  ...
</configuration>

上記の設定を設定すると、実行時エラーが発生するたびに、エラーの詳細を含む電子メールが に support@example.com 送信されます。 ELMAH のエラー 電子メールには、エラーの詳細 Web ページに表示されるのと同じ情報、つまり、エラー メッセージ、スタック トレース、およびサーバー変数が含まれます ( 図 45 を参照)。 エラー メールには、例外の詳細の黄色い画面の死のコンテンツも添付ファイル (YSOD.html) として含まれています。

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

エラーの詳細を電子メールで送信するように ELMAH を構成できることを示すスクリーンショット。

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

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

既定では、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>

注意

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

<equal>セクション内の <test> 要素は、アサーションと呼ばれます。 アサーションが true と評価された場合、エラーは ELMAH のログからフィルター処理されます。 、など、<greater><lesser><greater-or-equal><not-equal><lesser-or-equal>他のアサーションも使用できます。 また、 演算子と <or> Boolean 演算子を使用してアサーションを<and>組み合わせることもできます。 さらに、単純な 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 を使用するかどうかは重要ではありません。;両方のシステムを評価し、ニーズに最適なものを選択します。 基本的に重要なのは、運用環境で未処理の例外をログに記録するためのメカニズムが用意されていることです。

プログラミングに満足!

もっと読む

このチュートリアルで説明するトピックの詳細については、次のリソースを参照してください。