連載
|
|
|
例外発生時のエラー情報を出力する
●テキスト・ファイルへ出力する
以下は前回の「Data Access Application Blockを使用した場合のサンプル・プログラム」で紹介したソース・コードに例外処理を追加し、try-catchステートメントのcatchブロック中でLoggingABを使用して例外情報をログ出力する場合のサンプル・プログラムである。
|
|
LoggingABを使用した場合のサンプル・プログラム(C#) | |
このサンプル・プログラムを実行するには、以下のアセンブリを参照設定に追加する必要がある。 | |
・Microsoft.Practices.EnterpriseLibrary.Logging.dll |
上のサンプル・プログラムのログ出力機能を実行するために、わざと例外を発行させてみよう。具体的には、あらかじめ対象となるデータソース(ここではSQL Server)を停止しておいてから、上のサンプル・プログラムを実行する。この場合に出力されるログ内容は以下のようになる。
|
|
SqlException例外発生時にテキスト・ファイルへ出力されたログ内容 |
「Flat File Sink」ノードのFileNameプロパティで出力先パスを指定しなかった場合は、デフォルトではLoggingABを利用するアプリケーションの実行フォルダ(サンプル・プログラムでは「D:\LoggingAB\DAAB\bin\Debug」)にログ・ファイル(ファイル名はデフォルトでは「trace.log」)が出力される。
●イベント・ログへ出力する
出力先をテキスト・ファイルからイベント・ログへ切り替えたい場合は、Configurationコンソールで「Distributor Settings」ノードの「DefaultCategory」プロパティの設定値を「Trace」から「General」に変更するだけでよい。次の画面は、実際にイベント・ログに出力されたログ内容の例である。
SqlException例外発生時にイベント・ログへ出力されたログ内容 |
ちなみに、何らかの原因で(ファイル・ロックなど)任意のリソースへのログ出力が失敗した場合は、その原因に関する情報とログの内容が自動的にイベント・ログへ出力されるようになっている。
カスタムSinkを作成する
前掲の表「Enterprise Library 1.1のLoggingABで用意されているSink一覧」にもあるとおり、LoggingABはデフォルトでもさまざまなリソースへ出力するためのSinkを備えているのだが、ほかのリソースへ出力したいといった場合にユーザーが新たなSinkを独自に作成することで、そのリソース出力先を自由にカスタマイズできる機能も備えている。
そこで次に、コンソール画面にログを出力するカスタムSinkである「Console Log Sink」を作成する手順を紹介する。
●ConsoleSinkクラス作成
まずコンソール画面への出力処理を行うConsoleSinkクラスを実装する必要があるのだが、これには以下の手順に沿って、そのクラスを実装するだけでよい。
-
Visual Studio .NETから新しくクラス・ライブラリ(プロジェクト名は「ConsoleSink」)を作成する
-
1で作成したプロジェクトに新しくクラス(クラス名は「ConsoleSink」)を追加し、LogSinkクラス(Microsoft.Practices.EnterpriseLibrary.Logging.Sinks名前空間)から継承させる
-
ConfigurationViewクラス(LoggingABと構成情報を連結するクラス)のオブジェクトをパラメータに受け取る(LogSinkクラスの)Initializeメソッドをオーバーライドして、そこに初期化処理を実装する
-
LogEntryクラス(ログ情報を保持するクラス)のオブジェクトをパラメータに受け取る(LogSinkクラスの)SendMessageCoreメソッドをオーバーライドして、そこに実際の出力処理を実装する
上の手順を踏まえて作成されたConsoleSinkクラスのサンプルが以下である。
|
|
コンソール画面にログを出力するカスタムSinkの実装例 | |
このサンプル・プログラムをコンパイル・ビルドするには、以下のアセンブリを参照設定に追加する必要がある。 | |
・Microsoft.Practices.EnterpriseLibrary.Configuration.dll | |
・Microsoft.Practices.EnterpriseLibrary.Logging.dll |
上のサンプル・プログラムをビルドして生成された(ConsoleSinkクラスを含む)アセンブリ(本稿の例では、ConsoleSink.dll)は、「LoggingABを利用するアプリケーションの実行フォルダ」の中に配置しておこう。このように事前に配置するのは、後述するConfigurationコンソールのTypeNameプロパティにConsoleSink.dllを登録するだけでは、実行フォルダにアセンブリがコピーがされないためである。
次に、ConfigurationコンソールにConsoleSinkを登録しよう。
INDEX | ||
連載:Enterprise Library概説 | ||
拡張性と使いやすさを併せ持つログ出力機能を実装しよう | ||
1.ConfigurationコンソールでLoggingABの構成を設定する | ||
2.例外発生時のエラー情報を出力する | ||
3.カスタムSinkを作成する | ||
「Enterprise Library概説」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|