Apcoordinator ユーザーズガイド
目次 前ページ次ページ

第2部 Apcoordinatorコアの機能> 第5章 アプリケーションログ> 5.1 基本機能

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

目次 前ページ次ページ

All Rights Reserved, Copyright © 富士通株式会社 2000-2007