3.11.1概要
- このサンプルの目的
このアプリケーション作成例を通して、以下について知ることができます。
- サービスからログを出力する方法
- ログに出力するメッセージを生成する方法
- サンプルアプリケーションの内容
メッセージプロパティからメッセージを取得し、ログを出力するバッチアプリケーションです。
サンプルアプリケーションの概要を下図に示します。
CB3ではログ出力に標準でlog4jを利用します。但し、CB3の実装上はlog4jに依存していないため、他のログ出力ユーティリティを利用することも可能です。
また、CB3ではログに出力するためのメッセージを取得する機能を提供します。 メッセージ取得の機能はメッセージのIDを指定して、メッセージプロパティからメッセージを取得します。 このとき、メッセージに置換対象文字列を含めることもできます。 置換対象文字列はメッセージプロパティにメッセージを「{0}」のような形式で定義しておいて、メッセージを取得するときに動的にメッセージを置き換えます。
取得したメッセージにはジョブプロセスID(ジョブ実行時に自動的に振られるID、[サービスID] + [ジョブ開始日時(年月日時分秒))、 サービスID(サービスプロバイダのbean名)、メッセージID(メッセージプロパティに定義したID)を付加します。
このサンプルでは以下のファイルについて説明します。- LogSample.java
サービスのプログラムです。上図内の赤枠の部分に相当します。 - LogSampleConstant.java
ログ出力を行う際に必要なメッセージIDを文字列として定義した、定数クラスです。 - logSample.properties
メッセージを定義したプロパティファイルです。 - 起動用バッチファイル - logsample.bat
サービスを起動するためのバッチファイルです。
- LogSample.java
3.11.2サービスの作成
- LogSample.java
01:public class LogSample extends CB3Service { 02: 03: /** 04: * メッセージを出力しログを生成するメソッド 05: */ 06: @Override 07: protected int doService(ServiceParameters arg0, RuntimeParameters arg1) 08: throws ServiceException { 09: 10: Log log = LogFactory.getLog(LogSample.class); 11: // 独自に定義したメッセージID定義クラスからプロパティファイル名を取得し、 12: // LogMessageFactoryクラスを生成する 13: LogMessageFactory message = new LogMessageFactory(LogSampleConstant.CB3_SAMPLE_LOG_FILE); 14: 15: String hello = "Hello"; 16: String world = "World!!"; 17: 18: //ログメッセージを読み込み、infoログを出力する。getMessageは引数を複数指定できる。 19: log.info(message.getMessage(LogSampleConstant.CB3_SAMPLE_INFO, hello, world)); 20: return ExitCodeConstant.SUCCESS; 21: } 22:}
13行目:
メッセージの取得を行うためのjp.co.cybec.cb3.util.logging.LogMessageFactoryを生成しています。コンストラクタの引数には、メッセージプロパティ(このサンプルではlogSample.properties) のファイル名を引数に指定します。
19行目:
メッセージの取得とログの出力を行っています。メッセージを取得するためにはそのメッセージのIDを指定します。LogMessageFactoryオブジェクトのgetMassageメソッドに メッセージIDを指定(第一引数)してメッセージの取得を行っています。 logSample.propertiesには次のように定義されています。CB3.SAMPLE.INFOLOG =[{0} {1}]を出力しました。
左辺(CB3.SAMPLE.INFOLOG)がメッセージのID、右辺がメッセージとなります。上記サンプルプログラムのgetMessageメソッドではさらに、 二つの引数(hello、world)を指定しています。メッセージ中の{0}及び{1}は置換対象文字列で、この二つの引数でそれぞれ置き換えられ一つの メッセージになります。置換対象文字列は任意の数({0}...{n})指定することができ、メッセージを取得する際には置換対象文字列の数に合わせて、 引数を指定することでメッセージを形成することができます。
3.11.3設定ファイルの作成
- logSample.properties
下記はこのサンプルで使用しているメッセージです。
01: CB3.SAMPLE.INFOLOG =[{0} {1}]を出力しました。
メッセージの定義は上記のように「key=message」の形式で定義を行います。
メッセージ中の{0}、{1}は置換対象文字列で任意の数指定することができます。置換対象文字列は上記のように「{n}」の形式で 定義を行い、0から始まる番号をつけます。
3.11.4サービスの実行
- logsample.bat
下記バッチファイルはサービスを起動するためのバッチファイルです。
01:@echo off 02: 03:setlocal 04: 05:call ./set_classpath_com.bat 06: 07:set CLASSPATH=%CB3_HOME%/resources/config/logsample;%CLASSPATH% 08: 09:java jp.co.cybec.cb3.container.provider.ServiceProviderImpl -ServiceName logsample 10: 11:pause
上記バッチファイルを実行すると下記のように表示されます。
[2008-08-21 18:51:23.278] INFO (LogSample.java:38) [doService] JobProcessID:[log sample20080821185121] ServiceID:[logsample] MessageID:[CB3.SAMPLE.INFOLOG] [Hell o World!!]を出力しました。 続行するには何かキーを押してください . . .
logsample.logを確認すると以下のようにログ出力されています。