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

5.3 ログ拡張機能

ログ拡張機能を使用することで、不要なアプリケーションログの出力を制御するためのフィルタ機能や、syslogへの出力機能を利用することが可能です。ログ拡張機能を使用する場合は、[Apcoordinatorのインストールフォルダ]¥lib¥ujief.jarをクラスパスに設定してください。

ログフィルタ機能

特定の文字列を含むアプリケーションログのみを選択して出力することができます。文字列は正規表現パターンで指定します。
ログフィルタ機能を使用する場合は、com.fujitsu.uji.log.writer.FilterWriterクラスを使用します。
下記の例では、日付と時刻のあとに"Warning"という文字列を含むものだけを出力します。

import com.fujitsu.uji.*;
import com.fujitsu.uji.log.*;
import com.fujitsu.uji.log.writer.FilterWriter;

public class SampleApplication extends com.fujitsu.uji.ApplicationProfile
{
  public LogComposer newLogComposer() {
    LogComposer lc;
    try {
      String pattern = "[0-9][0-9][0-9][0-9]/[0-1][0-9]/[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9] Warning.*$";
      FilterWriter writer = new FilterWriter(pattern);
      lc = new LogComposer(new PrintLogSink(writer, new LineLogFormat("%d %m")));
    } catch(IllegalArgumentException e) {
      return null; // デフォルトを使用
    }
    lc.setQueueSize(1000);
    lc.enableQueue();
    lc.setLogLevel(9);
    return lc;
  }
}

ポイント

ログの出力フォーマット設定を併用することで、処理対象のメソッド名や、時刻によってログの出力先を変更することが可能です。

注意

FilterWriterクラスには補助文字の使用に関して以下の注意事項があります。

  • 正規表現パターンに補助文字を含めることはできません。

  • ログに出力する文字列を正規表現パターンとマッチさせる際、文字列中に補助文字が含まれている場合は、その補助文字は1文字としては扱われず2文字として扱われます。

syslogへの出力機能

アプリケーションログをsyslogへ出力する方法は以下の2つがあります。

ログ定義ファイルを使用したsyslog出力

ログ定義ファイルにアプリケーションログの出力先としてsyslogを設定することにより、アプリケーションログをsyslogに出力することができます。
ログ定義ファイルでは、syslogサーバのホスト名や、ログの機能(Facility値)、ログの重大度(Severity値)を設定することが可能です。
下記では、localhostのsyslogサーバに、機能を"ユーザ"(デフォルト)、重大度を"エラー"として設定しています。

<logComposer name="system">
  <output name="sysLogOut" type="syslog"/>
    <param name="hostname" value="localhost"/>
    <param name="facility" value="user"/>
    <param name="severity" value="err"/>
  </output>
</logComposer>

ログ定義ファイルの詳細は“5.5 定義ファイルを用いたログ出力”を参照してください。

SyslogWriterクラスを使用したsyslog出力

com.fujitsu.uji.log.writer.SyslogWriterクラスを使用します。
SyslogWriterクラスでは、syslogサーバのホスト名や、ログの機能(Facility値)、ログの重大度(Severity値)を設定することが可能です。
下記では、localhostのsyslogサーバに、機能を"ユーザ"(デフォルト)、重大度を"エラー"として送信しています。

import com.fujitsu.uji.*;
import com.fujitsu.uji.log.*;
import com.fujitsu.uji.log.writer.SyslogWriter;

public class SampleApplication extends com.fujitsu.uji.ApplicationProfile
{
    public LogComposer newLogComposer() {
        LogComposer lc;
        try {
            SyslogWriter writer = new SyslogWriter("localhost");
            writer.setSeverity(SyslogWriter.SEVERITY_ERR);
            lc = new LogComposer(new PrintLogSink(writer, new LineLogFormat("%d %m")));
        } catch(IllegalArgumentException e) {
            return null; // デフォルトを使用
        }
        lc.setQueueSize(1000);
        lc.enableQueue();
        lc.setLogLevel(9);
        return lc;
    }
}

syslogの出力方法について

Solaris環境およびLinux環境においてlocalhostのsyslogにメッセージを出力する場合、以下の2つの方法を選択することができます。

UDPでlocalhostにメッセージを出力する場合、syslogdが出力元のアドレスを元に名前解決を行うため、syslogのメッセージに出力されるホスト名が、設定によって実ホストとならない場合があります。Systemwalkerなどでsyslogのメッセージに出力されるホスト名を元にメッセージの監視を行っている場合は、syslog関数を選択してください。

注意

syslogサーバの設定方法は、ご使用になるsyslogサーバのマニュアルを参照してください。
syslog関数を使用してログを出力する場合、ログ定義ファイルを使用してログの出力を行ってください。