連載
Enterprise Library概説

拡張性と使いやすさを併せ持つログ出力機能を実装しよう

―― ベスト・プラクティスを追求した「Logging & Instrumentation Application Block」 ――

市川 龍太(patterns & practices Champion
2005/08/27
Page1 Page2 Page3

 前回では、Data Access Application Blockを使ったデータアクセス・ヘルパー機能の実装と拡張ツールについて解説した。

 今回は、業務システムには欠かすことのできないログ出力機能を提供する「Logging & Instrumentation Application Block」(以下LoggingAB)を紹介する。なお、今後の連載では2005年7月1日(日本時間)にリリースされたEnterprise Library 1.1(Enterprise Library - June 2005。詳しくは第3回の「【コラム】Enterprise Library 1.1について」を参照)を使って解説していく。

ログの出力先と書式の分離

 まずはLoggingABの要となる、ログ出力先を管理する機能と、ログの出力書式を管理する機能を紹介しよう。

●出力先リソースに関する情報を保持する「Sink」

 LoggingABはログ出力を行うApplication Blockであるが、実際の業務システムでよく利用されるテキスト・ファイルやイベント・ログへの出力以外にもさまざまなリソースに対してログを出力することが可能になっている。これら出力先リソースに関する情報を独立させて管理するのが「Sink」である。このSinkによって、LoggingABではログの出力先リソースを柔軟に切り替えられるようになっている。

 以下にLoggingABで用意されているSinkの一覧を示す。

Sinkの種類 機能内容
Event Log Sink イベント・ログへ出力する
Email Sink ログ内容が記述された電子メールを送信する
Flat File Sink テキスト・ファイルへ出力する
Msmq Sink ログ内容をMSMQ(Microsoft Message Queuing)へキューイングする
WMI Log Sink ログ情報を基にWMI(Windows Management Instrumentation)用の管理イベントを発生させる
Database Sink Data Access Application Blockを利用して、データソース(データベースなど)へ出力する
Enterprise Library 1.1のLoggingABで用意されているSink一覧
標準で用意されているこれらのSink以外にも、拡張機能として「Rolling Flat Sink」が存在する(詳細後述)。

●出力書式に関する情報を保持する「Formatter」

 単にログを出力するといっても、「テキスト形式」もあれば「XML形式」もあり、さまざまな出力書式が考えられる。そのような出力書式に関する情報を保持するのが「Formatter」である。Enterprise Library 1.1では、「Text Formatter」(テキスト形式)のみが用意されている。

ConfigurationコンソールでLoggingABの構成を設定する

 それでは次にConfigurationコンソールを使ったLoggingABの構成管理手順について解説しよう。LoggingABをアプリケーションで利用するためには、まずこれらの設定を行っておく必要がある。

●ConfigurationコンソールでのLoggingABの追加

 「The Enterprise Library Configuration Console」(以下Configurationコンソール)の基本的な使い方は、前回紹介した使い方と大体同じだが、今回は「アプリケーション」ノードに「Logging & Instrumentation Application Block」ノードを追加する。

ConfigurationコンソールでのLoggingABの追加
Configurationコンソールを起動するには、[スタート]メニュー−[プログラム]−[Microsoft patterns & practices]−[Enterprise Library - June 2005]−[Enterprise Library Configuration]をクリックすればよい。ここでは事前に、新規のアプリケーションを追加しておく必要がある。これを行うには、ツールバーの[New Application]をクリックするか、メニューバーから[File]−[New Application]を選択すればよい。これにより「Application1」ノードがTreeViewコントロールのルートにある[Enterprise Library Configuration]ノードの直下に作成されるはずだ。
  LoggingABを追加する。これを行うには、事前に新規追加しておいた「Application1」ノードの上で右クリックしてコンテキスト・メニューを表示し、そこから[New]−[Logging & Instrumentation Application Block]を選択すればよい。これにより「Logging & Instrumentation Application Block」ノードが「Application1」ノードの下に追加され、さらに「Logging & Instrumentation Application Block」ノードの子ノードとして、「Client Settings」ノード、「Distributor Settings」ノードが追加される(詳細後述)。
  LoggingABと依存関係にある「Configuration Application Block」のノードが自動的に追加される。追加された各ノードのプロパティを設定して、LoggingABの挙動をカスタマイズする(詳細後述)。

 上の図を見ると分かるように、「Logging & Instrumentation Application Block」ノードの配下には次のような子ノードが自動的に追加される。

  1. Client Settings
     →「ログ出力機能の振る舞い」を設定するノード

  2. Distributor Settings
     →「Sink、Formatter、Category(=SinkとFormatterの組み合わせ)」を設定するノード

 LoggingABは「Distributor Settings」ノードで出力先リソースと書式の組み合わせを設定し、「Client Settings」ノードでログ出力処理を制御することで、ソース・コードを変更することなくログ出力の振る舞いを柔軟に変更できるのである。

●「Logging & Instrumentation Application Block」配下の各ノードにおけるプロパティ設定

 以下の表は、上記の各ノードの各プロパティに対して、出力先リソースとしてイベント・ログとテキスト・ファイルを、書式としてテキスト形式を指定した設定例である。

ノード プロパティ 設定値
Client Settings CategoryFilterSettings Allow all except:
DistributionStrategy In Process
LoggingEnabled True
MinimumPriority 0
TracingEnabled True
Distributor Settings DefaultCategory Trace
DefaultFormatter Text Formatter
Categories General Event Log Destination Formatter Text Formatter
Name Event Log Destination
Sink Event Log Sink
Trace Flat File Destination Formatter Text Formatter
Name Flat File Destination
Sink Flat File Sink
Formatters Text Formatter Name Text Formatter
Template <template>
Sinks Event Log Sink EventLogName Application
EventSourceName Enterprise Library Logging
Name Event Log Sink
Flat File Sink FileName trace.log
Footer ----------------------------------------
Header ----------------------------------------
Name Flat File Sink
LoggingAB配下の各ノードのプロパティに対する設定の例
この表では、Flat File SinkとText Formatterを組み合わせたテキスト形式でのログ出力を、LoggingABに対して設定している。表中の太字の個所がデフォルト設定から変更した設定値である。

 具体例は次項で示すが、この表の設定では、アプリケーションからログを出力する場合には「trace.log」というファイルにテキスト形式でログが出力される(DefaultCategoryプロパティをTraceに設定しているため)。

 ConfigurationコンソールでのLoggingABの構成設定が終了したら、最後に設定を保存しよう。メニューバーの[File]−[Save Application]を実行すると、どこに保存するかを選択するための[Save Application : Application1]ダイアログが表示される。このダイアログの[ファイル名]の欄ではLoggingABを使用する「アプリケーション構成ファイルの名前」(Windowsアプリケーションの場合は「App.config」、ASP.NET Webアプリケーションの場合は「Web.config」)を指定する。これにより、Configurationコンソールで設定した内容が、指定した名前のアプリケーション構成ファイルにXML形式で出力される。

 これでLoggingABを使う準備が整ったので、続いては実際に使ってみよう。


 INDEX
  連載:Enterprise Library概説
  拡張性と使いやすさを併せ持つログ出力機能を実装しよう
  1.ConfigurationコンソールでLoggingABの構成を設定する
    2.例外発生時のエラー情報を出力する
    3.カスタムSinkを作成する
 
インデックス・ページヘ  「Enterprise Library概説」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間