ページの先頭行へ戻る
 Apcoordinatorユーザーズガイド

5.1.1 ユーザ定義のログ出力クラスの作成

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派生クラスを作成する場合は、デフォルトコンストラクタを定義してください。