例外クラスとハンドラークラスのマッピングを定義する。
<configuration>
<configSections>
<!-- エラーハンドラー設定セクション定義 -->
<section name="errorHandler" type="CFW.Config.ErrorHandlerConfigSettingSection,CFW" allowLocation="true" allowDefinition="Everywhere"/>
</configSections>
...(snip)
<!-- エラーハンドラー設定セクション -->
<errorHandler>
<!-- SQLサーバーの例外処理
CFW.ErrorHandler.SqlExceptionHandler が処理する -->
<add exceptionName="System.Data.SqlClient.SqlException"
handler="CFW.ErrorHandler.SqlExceptionHandler,CFW" />
<!-- テスト用
CFW.Common.Test.ErrorHandler.NullPointerExceptionHandlerが処理する
-->
<add exceptionName="CFW.Common.Test.ErrorHandler.NullPointerException"
handler="CFW.Common.Test.ErrorHandler.NullPointerExceptionHandler,CFW.Common.Test" />
</errorHandler>
...(snip)
</configuration>
マッピングが定義されていない場合、ErrorHandlerFactoryが既定の検索順序で検索して適当なハンドラークラスを見つける。検索順序は
CFW.ErrorHandler.ErrorHandlerFactory#GetInstanceを使用してCFW.ErrorHandler.ErrorHandler実装オブジェクトを取得。
ErrorHandler handler = ErrorHandlerFactory.GetInstance(ex);
ErrorHandler実装オブジェクトにログを出力させる
try{
// ...何か処理を行う
}
catch(Exception ex)
{
CFW.ErrorHandler.ErrorHandler handler = CFW.ErrorHandler.ErrorHandler.GetInstance(ex);
handler.WriteLog();
}
finally{
// ...何か後始末を行う
}
現在実装済みのErrorHandler(C#)は以下のとおり
CFW.ErrorHandler.DefaultErrorHandler | Exceptin.Message、StackTraceをログに出力する |
CFW.ErrorHandler.SqlExceptionHandler | SQL例外のメッセージを出力する。内部エラーが存在する場合はすべてのエラーについて同様の処理を行う。 |
CFW.ErrorHandler.InvalidCastExceptionHandler | キャストエラー用(元はサンプルとして実装。) |
CFW.ErrorHandler.FormatExceptionHandler | 書式化エラー用(元はサンプルとして実装。) |
...