ログ拡張機能を使用することで、不要なアプリケーションログの出力を制御するためのフィルタ機能や、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関数を使用してログを出力する場合、ログ定義ファイルを使用してログの出力を行ってください。