ELMAHを使用するとASP.NETアプリのYSOD(Yellow Screen of Death)の時の詳細な情報を取得することができます。YSODとはASP.NETアプリでハンドルされない例外の発生のことをいい、以下のような黄色の背景が含まれた画面が表示されます。
ELMAHの利用は簡単でソースコードの再コンパイルの必要なく導入することも可能です。
ELMAHとは?
ASP.NETアプリのYSODの時のスタックやYSODの画面といったトラブルシューティングに必要な情報をログするためのDLLです。また、YSOD時にメールを送ったりすることも可能です。
エラー情報は以下のようなものに保存することができます。
・Microsoft SQL Server
・Oracle
・SQLite
・Microsoft Access
・Loose XML files
・メモリ
・SQL Server Compact Edition
・MySQL
・PostgreSQL
ここでは導入が手軽なASP.NET Web アプリケーションのYSODのデータをメモリにを保存する例を示します。
今回使用するWebサイト
以下のようなサイトで、"クリックすると例外が発生します"をクリックすると0で割る計算を行い例外を発生させるサイトを利用します。
ELMAHの使用例
1. ELMARをサイトからダウンロードします。
今回は環境がx64環境のため、Current ReleasesのBinaries(x64)をクリックして、2011/12/26現在最新バージョンである1.2 SP1をダウンロードしました。
2. ダウンロードしたZIPを解凍し、ELMAH-1.2-sp1-bin-x64\bin\net-2.0\ReleaseにあるElmah.dllをサイトのbinフォルダ(例:C:\inetpub\wwwroot\mysite\myelmah\bin)にコピーします。
3. HTTP HandlerとHTTP Moduleを登録するためにWeb.configを修正します。
HTTP Handlerの登録は、今回はIIS7.5(Windows 7)で統合モードを使用しているので以下のようになります。(そのほかの環境場合はMSDN(http://msdn.microsoft.com/en-us/library/46c5ddfy.aspx)を参照ください。)
<handlers>
<add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" preCondition="integratedMode" type="Elmah.ErrorLogPageFactory, Elmah"/>
</handlers>
Http Moduleの登録は以下のようになります。
<modules runAllManagedModulesForAllRequests="true">
<add name ="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
</modules>
上記2つを合わせて、<system.webServer>は以下のようになります。
<system.webServer>
<handlers>
<add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" preCondition="integratedMode" type="Elmah.ErrorLogPageFactory, Elmah"/>
</handlers>
<modules runAllManagedModulesForAllRequests="true">
<add name ="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
</modules>
</system.webServer>