LogComposer派生クラスを作成することで、ログ本文の編集を行う処理を記述することが可能です。
ログ出力機能のカスタマイズ
LogComposerオブジェクトは、アプリケーションクラスで任意に設定することができます。 ApplicationProfileクラスのnewLogComposerをオーバーライドし、LogComposerオブジェクトを返すことで、ログのフォーマットや出力先を変えることができます。デフォルトでは、キュー有効で、標準出力に日付付きメッセージを出力します。
public class SampleApplication extends com.fujitsu.uji.ApplicationProfile { public LogComposer newLogComposer() { LogComposer lc; try { lc = LogComposer.getFileOutputInstance("c:\\myapp\\mylog.txt", true, new LineLogFormat("%d %m")); } catch(IOException e) { return null; // デフォルトを使用 } lc.setQueueSize(1000); lc.enableQueue(); lc.setLogLevel(9); return lc; } }
ログ出力を無効にする場合は、空のLogComposerオブジェクトを返します。
public LogComposer newLogComposer() { return new LogComposer(); }
派生クラスでは、ログ本文の編集を行ったあとに、LogComposerクラスのprintlnメソッドを呼び出し、ログ出力を行います。
派生クラスの作成
メッセージの編集を行うようprintlnメソッドをオーバーライドし、ログを出力するLogComposer派生クラスの作成例を以下に示します。
/** * メッセージの編集を行う派生クラスの作成例です。 * この例では、基底クラスに LogComposerを用いています。 * 再定義するメソッドは、利用するアプリケーションの要件により異なります。 */ package my.sample; import com.fujitsu.uji.log.LogComposer; public class MyLogComposer extends LogComposer { public MyLogComposer() { } public void println(int level, Object obj, int back) { // 指定のログレベルがログ出力対象になっているかを判断します。 if( isLogged(level) ) { // メッセージの編集を行います。 StringBuffer buf = new StringBuffer(); buf.append(" PREFIX TEXT "); buf.append( String.valueOf(obj) ); // 編集後に、基底クラスのメソッドを呼び出します。 output(level, buf.toString(), back); } } }
ユーザー独自のメソッドを定義し、メッセージの編集を行ってprintlnメソッドを呼び出し、ログを出力するLogComposer派生クラスの作成例を以下に示します。
/** * メッセージの編集を行う派生クラスの作成例です。 * この例では、基底クラスに LogComposerを用いています。 */ package my.sample; import com.fujitsu.uji.log.LogComposer; public class MyLogComposer2 extends LogComposer { public MyLogComposer2() { } public void myPrintln(int level, Object obj1, Object obj2, int back) { // 指定のログレベルがログ出力対象になっているかを判断します。 if( isLogged(level) ) { // メッセージの編集を行います。 StringBuffer buf = new StringBuffer(); buf.append( String.valueOf(obj1) ); buf.append( "," ); buf.append( String.valueOf(obj2) ); // 編集後に、基底クラスのメソッドを呼び出します。 println(level, buf.toString(), back); } } }
注意
LogComposer派生クラスを作成する場合は、デフォルトコンストラクタを定義してください。