共通ドキュメント

エラー処理

概要

  • 概念
  • 設定
  • エラーハンドラーの取得
  • ログ出力
  • 実装済みのErrorHandler(C#)
  • 新しいエラーハンドラーの実装

概念

  • 処理したい例外に対応するErrorHandler実装クラスを作成する。
  • 例外が発生したらErrorHandler実装クラスのインスタンスを取得し、ログを出力する。
  • 出力内容は 例外メッセージ、スタックトレース。他実装クラスにより色々
  • 使用中のリソースは破棄する。
  • 必要なら例外メッセージを表示する。

設定

例外クラスとハンドラークラスのマッピングを定義する。


<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が既定の検索順序で検索して適当なハンドラークラスを見つける。検索順序は

  • 元の例外クラス名+"Handler"の名前を持つクラス
  • "CFW.ErrorHandler." + 元の例外クラスの基本名 +"Handler"の名前を持つクラス
  • "CFW.ErrorHandler.DefaultErrorHandler"

エラーハンドラーの取得

CFW.ErrorHandler.ErrorHandlerFactory#GetInstanceを使用してCFW.ErrorHandler.ErrorHandler実装オブジェクトを取得。

例(C#)


ErrorHandler handler = ErrorHandlerFactory.GetInstance(ex);
			

ログ出力

ErrorHandler実装オブジェクトにログを出力させる

例(C#)


try{
    // ...何か処理を行う
}
catch(Exception ex)
{
    CFW.ErrorHandler.ErrorHandler handler = CFW.ErrorHandler.ErrorHandler.GetInstance(ex);
    handler.WriteLog();
}
finally{
    // ...何か後始末を行う
}
			

実装済みのErrorHandler(C#)

現在実装済みのErrorHandler(C#)は以下のとおり

CFW.ErrorHandler.DefaultErrorHandlerExceptin.Message、StackTraceをログに出力する
CFW.ErrorHandler.SqlExceptionHandlerSQL例外のメッセージを出力する。内部エラーが存在する場合はすべてのエラーについて同様の処理を行う。
CFW.ErrorHandler.InvalidCastExceptionHandlerキャストエラー用(元はサンプルとして実装。)
CFW.ErrorHandler.FormatExceptionHandler書式化エラー用(元はサンプルとして実装。)

新しいハンドラーの実装

...