ログ拡張機能を使用することで、不要なアプリケーションログの出力を制御するためのフィルタ機能や、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出力
SyslogWriterクラスを使用した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 定義ファイルを用いたログ出力”を参照してください。
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
syslog関数
UDPでlocalhostにメッセージを出力する場合、syslogdが出力元のアドレスを元に名前解決を行うため、syslogのメッセージに出力されるホスト名が、設定によって実ホストとならない場合があります。Systemwalkerなどでsyslogのメッセージに出力されるホスト名を元にメッセージの監視を行っている場合は、syslog関数を選択してください。
注意
syslogサーバの設定方法は、ご使用になるsyslogサーバのマニュアルを参照してください。
syslog関数を使用してログを出力する場合、ログ定義ファイルを使用してログの出力を行ってください。