S2でのLoggerクラスの使い方
S2コアの中にはlog4jをラップした便利なLoggerクラスがあります。私はこのクラスを正しく使っていなかったので、ここに整理しておきます。
主要クラス
準備するもの
- XXXMessages.properties
- 「XXX」の3文字がシステム名になる
- XXXMessages_ja.properties
- 日本語対応する場合は、ロケールに合わせたプロパティファイルを用意する
例:RMIMessages_ja.properties
以下はS2RMIで使用しているログメッセージようのプロパティファイルです。
DRMI0001=RMIレジストリをポート {0} で作成しました。 DRMI0002=オブジェクトをカスタムRMIソケットファクトリを使用して サービスポート {0} で公開しました。 DRMI0003=オブジェクトをサービスポート {0} で公開しました。 DRMI0004=公開したオブジェクト "{0}" をRMIレジストリにバインドしました。
プロパティファイルの中身
メッセージコード(8桁)=メッセージ
メッセージコード
メッセージコード(8桁)=メッセージ種別(1桁)+システム名(3桁)+連番(4桁)
メッセージ種別
D = DEBUG, I = INFO, W = WARN, E = ERROR, F = FATAL
ソース内での記述方法(基本)
org.seasar.framework.log.Logger.getLogger()メソッドでLoggerクラスのインスタンスを取得し、以下のようにlog()メソッドを利用します。
logger.log("DRMI0001", new Object[] { Integer.toString(this.registryPort) });
実際に表示される内容は以下の通り。
DEBUG 2005-06-01 00:44:49,616 [main] RMIレジストリをポート 1108 で作成しました。
log()メソッド
org.seasar.framework.log.Loggerのlog()メソッドは2種類あります。
- public final void log(String messageCode, Object[] args)
- 内部的には次のlog()メソッドの第3引き数をnullにして呼び出す
- public final void log(String messageCode, Object[] args, Throwable throwable)
3つの引数を持つlog()メソッドは、内部でメッセージコードからメッセージ種別を判別し、対応するCommons Loggingのメソッド(debug, info, warn, error, fatal)を呼び出します。
また、内部的にはこの処理の直前でisEnabledFor()メソッドを呼び出しており、Commons Loggingの各isEnableメソッド(isDebugEnabled, isInfoEnabled, isWarnEnabled, isErrorEnabled, isFatalEnabled)によるロギング処理の実行チェックを行っています。