ELMAH でエラーの詳細をログに記録する (C#)
エラー ログ モジュールとハンドラー (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 つの簡単な手順が含まれます:
- ELMAH をダウンロードし、
Elmah.dll
アセンブリを Web アプリケーションに追加します、 - ELMAH の HTTP モジュールとハンドラーを
Web.config
に登録します、 - ELMAH の構成オプションを指定し、
- 必要に応じて、エラー ログ ソース インフラストラクチャを作成します。
これら 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 モジュールは、登録されると、HttpApplication
の Error
イベントをサブスクライブします。 このイベントが発生するたびに、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_GetErrorsXml
、ELMAH_GetErrorXml
、および ELMAH_LogError
の 3 つのストアド プロシージャがあることを想定しています。 ELMAH のダウンロードには、このテーブルとこれらのストアド プロシージャを作成するための T-SQL を含む db
フォルダーに SQLServer.sql
という名前のファイルが含まれています。 SqlErrorLog
プロバイダーを使用するには、データベースでこれらのステートメントを実行する必要があります。
図 1 と 2 は、SqlErrorLog
プロバイダーで必要なデータベース オブジェクトが追加された後の Visual Studio のデータベース エクスプローラーを示しています。
図 1: SqlErrorLog
プロバイダーがエラーを ELMAH_Error
テーブルに記録する
図 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
にアクセスするときのエラー ログを示しています。
図 3: Elmah.axd
Web ページからエラー ログを表示する
(クリックするとフルサイズの画像が表示されます)
図 3 のエラー ログには、6 つのエラー エントリが含まれています。 各エントリには、HTTP 状態コード (これらのエラーの場合は 404 または 500)、種類、説明、エラーが発生したときにログオンしたユーザーの名前、および日付と時刻が含まれます。 [詳細] リンクをクリックすると、エラーの詳細 (図 4 を参照) に表示されているエラー メッセージと、エラー時のサーバー変数の値 (図 5 を参照) と同じエラー メッセージが含まれるページが表示されます。 エラーの詳細が保存されている生の XML を表示することもできます。これには、HTTP POST ヘッダーの値などの追加情報が含まれます。
図 4: エラーの詳細 YSOD を表示する
(クリックするとフルサイズの画像が表示されます)
図 5: エラー時のサーバー変数コレクションの値を調べる
(クリックするとフルサイズの画像が表示されます)
運用 Web サイトに ELMAH を展開するには、次の作業が必要です:
Elmah.dll
ファイルを運用環境のBin
フォルダーにコピーして、- ELMAH 固有の構成設定を、運用環境で使用される
Web.config
ファイルにコピーして、 - 実稼働データベースへのエラー ログ ソース インフラストラクチャを追加します。
前のチュートリアルでは、開発から運用環境にファイルをコピーする手法について説明しました。 運用データベースでエラー ログ ソース インフラストラクチャを取得する最も簡単な方法は、SQL Server Management Studio を使用して運用データベースに接続し、SqlServer.sql
スクリプト ファイルを実行することです。これにより、必要なテーブルとストアド プロシージャが作成されます。
運用環境でのエラーの詳細ページの表示
サイトを運用環境に展開した後、運用 Web サイトにアクセスし、ハンドルされない例外を生成します。 開発環境と同様に、ELMAH は、ハンドルされない例外が発生したときに表示されるエラー ページには影響しません。代わりに、エラーをログに記録するだけです。 運用環境からエラー ログ ページ (elmah.axd
) にアクセスしようとすると、図 6 に示されている禁止ページに表示されます。
図 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 ページのスクリーン ショットについては、 図 3、4、5 を参照してください。 ただし、匿名または管理者以外のユーザーがエラー ログ ページを表示しようとすると、図 7 が示すように、ログイン ページ (Login.aspx
) 自動的にリダイレクトされます。
図 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 ページに示されているのと同じ情報、つまり、エラー メッセージ、スタック トレース、およびサーバー変数が含まれます (図 4 と 5 を参照)。 エラー メールには、例外の詳細の黄色い画面のコンテンツも添付ファイル (YSOD.html
) として含まれています。
図 8 は、Genre.aspx?ID=foo
にアクセスして生成された ELMAH のエラー メールを示しています。 図 8 はエラー メッセージとスタック トレースのみを示していますが、サーバー変数はメールの本文の下にさらに含まれます。
図 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 を使用することは問題ではりません。両方のシステムを評価し、ニーズに最も適したものを選択してください。 基本的に重要なのは、運用環境でハンドルされない例外をログに記録するためのメカニズムを用意することです。
プログラミングに満足!
もっと読む
この記事で説明したトピックの詳細については、次のリソースを参照してください。