第11章 ロギングサブシステム

11.1. はじめに

11.1.1. ロギングの概要

JBoss Enterprise Application Platform 6 は、独自の内部使用とデプロイされたアプリケーションによる使用のために高度な設定が可能なロギング機能を提供します。ロギングシステムは、JBoss LogManager をベースとしており、log4j、Java Utils Logging (java.util.logging)、および JBoss Logging を含む複数のアプリケーションロギングフレームワークをサポートします。
また、JBoss Enterprise Application Platform 6 には、アプリケーションにロギング機能を追加するために使用できる強力で使いやすいロギングフレームワークである JBoss Logging が含まれます。

11.1.2. JBoss LogManager でサポートされるアプリケーションロギングフレームワーク

JBoss LogManager は次のロギングフレームワークをサポートします。

11.1.3. ブートロギングの設定

ブートログは、サーバーの起動中 (または「ブート中」) に発生したイベントのレコードです。
ブートログは logging.properties ファイルを編集して設定できます。このファイルは、標準的な Java プロパティーファイルであり、テキストエディターで編集できます。ファイルの各行の形式は property=value です。
logging.properties ファイルへの完全パスは EAP_HOME/domain/configuration/logging.properties または EAP_HOME/standalone/configuration/logging.properties のいずれかになります。これは JBoss Enterprise Application Platform を管理対象ドメインまたはスタンドアロンサーバーとして稼動しているかどうかによって異なります。

11.1.4. デフォルトログファイルの場所

これらは、デフォルトのロギング設定に対して作成されたログファイルです。デフォルトの設定では、周期的なログハンドラーを使用してサーバーログファイルが書き込まれます。

表11.1 スタンドアローンサーバー用デフォルトログファイル

ログファイル 説明
EAP_HOME/standalone/log/boot.log
サーバーブートログには、サーバーの起動に関するログメッセージが含まれます。
EAP_HOME/standalone/log/server.log
サーバーログには、サーバーが起動された後のすべてのログメッセージが含まれます。

表11.2 管理対象ドメイン用デフォルトログファイル

ログファイル 説明
EAP_HOME/domain/log/host-controller/boot.log
ホストコントローラーブートログには、ホストコントローラーの起動に関するログメッセージが含まれます。
EAP_HOME/domain/log/process-controller/boot.log
プロセスコントローラーブートログには、ホストコントローラーの起動に関するログメッセージが含まれます。
EAP_HOME/domain/servers/SERVERNAME/log/boot.log
指定されたサーバーのサーバーブートログには、指定されたサーバーの起動に関するログメッセージが含まれます。
EAP_HOME/domain/servers/SERVERNAME/log/server.log
指定されたサーバーのサーバーログには、指定されたサーバーが起動された後のすべてのログメッセージが含まれます。

11.1.5. ログレベルとは

ログレベルとは、ログメッセージの性質と重大度を示す列挙値の順序付けされたセットです。 特定のログメッセージのレベルは、そのメッセージを送信するために選択したロギングフレームワークの適切なメソッドを使用して開発者が指定します。
JBoss Enterprise Application Platform 6 では 6 つのログレベルを使用します (低から高の順): TRACEDEBUGINFOWARNERRORFATAL
ログレベルはログカテゴリとログハンドラーによって使用され、それらが担当するメッセージを限定します。ログカテゴリとログハンドラーは、そのレベル以上の受信メッセージを処理します。たとえば、WARN レベルのログハンドラーは、WARNERROR、および FATAL のレベルのメッセージのみを記録します。

11.1.6. サポートされているログレベル

表11.3 サポートされているログレベル

ログレベル 説明
FATAL
クリティカルなサービス障害やアプリケーションのシャットダウンをもたらしたり、JBoss Enterprise Application Platform 6 のシャットダウンを引き起こす可能性があるイベントを表示するのに使用します。
ERROR
発生したエラーの中で、現在のアクティビティや要求の完了を妨げる可能性があるが、アプリケーション実行の妨げにはならないエラーを表示するのに使用します。
WARN
エラーではないが、理想的とは見なされない状況を表示するのに使用します。将来的にエラーをもたらす可能性のある状況を示す場合もあります。
INFO
アプリケーションの全体的な進捗状況を示すメッセージに使用します。多くの場合、アプリケーションの起動、シャットダウン、およびその他の主要なライフサイクルイベントに使用されます。
DEBUG
アプリケーションの個別の要求またはアクティビティの進捗状況を表示するメッセージに使用します。DEBUG のログメッセージは通常アプリケーションのデバッグ時のみにキャプチャーされます。
TRACE
アプリケーションの実行状態に関する詳細情報を提供するメッセージに使用します。通常、TRACE のログメッセージはアプリケーションのデバッグ時のみにキャプチャーされます。

11.1.7. ログカテゴリとは

ログカテゴリは、キャプチャーするログメッセージのセットと、メッセージを処理する単一または複数のログハンドラーを定義します。
キャプチャーするログメッセージは、元の Java パッケージとログレベルによって定義されます。そのパッケージ内のクラスおよびそのログレベル以下のメッセージがログカテゴリによってキャプチャーされ、指定のログハンドラーに送信されます。
オプションとして、ログカテゴリは独自のハンドラーの代わりに root ロガーのログハンドラーを使用することができます。

11.1.8. ルートロガーについて

ルートロガーは、サーバーに送信された (指定レベルの) 全ログメッセージの中でログカテゴリによってキャプチャーされなかったログメッセージをキャプチャーします。これらのメッセージは単一または複数のハンドラーに送信されます。
デフォルトでは、ルートロガーはコンソールおよび定期ログハンドラーを使用するように設定されています。定期ログハンドラーは、server.log ファイルに書き込むように設定されています。このファイルはサーバーログと呼ばれる場合もあります。

11.1.9. ログハンドラーとは

ログハンドラーは、JBoss Enterprise Application Platform がキャプチャーされたログメッセージを記録する方法を定義します。設定可能なログハンドラーには 5 つのタイプがあります: ConsoleFilePeriodicSizeAsyncCustom

11.1.10. ログハンドラーのタイプ

コンソール
コンソールログハンドラーは、ログメッセージをホストオペレーティングシステムの標準出力 (stdout) または標準エラー (stderr) ストリームに書き込みます。これらのメッセージは、JBoss Enterprise Application Platform 6 がコマンドラインプロンプトから実行された場合に表示されます。オペレーティングシステムで標準出力または標準エラーストリームをキャプチャーするように設定されていない限りは、コンソールログハンドラーからのメッセージは保存されません。
ファイル
ファイルログハンドラーは、ログメッセージを指定のファイルに書き込む、最もシンプルなログハンドラーです。
定期
定期ファイルハンドラーは、指定した時間が経過するまで、ログメッセージを指定ファイルに書き込みます。その時間が経過した後には、指定のタイムスタンプが追記されてファイルの名前が変更され、 ハンドラーは元の名前で新規作成されたログファイルに書き込みを継続します。
サイズ
サイズログハンドラーは、指定ファイルが指定したサイズに達するまで、そのファイルにログメッセージを書き込みます。ファイルが指定したサイズに達すると、数値のプレフィックスが付いて名前が変更され、ハンドラーは元の名前で新規作成されたログファイルに書き込みを継続します。各サイズログハンドラーは、この方式で保管されるファイルの最大数を指定する必要があります。
非同期
非同期ログハンドラーは、 単一または複数のログハンドラーを対象とする非同期動作を提供するラッパーログハンドラーです。非同期ログハンドラーは高レイテンシ、もしくはネットワークファイルシステムへのログファイル書き込みなどにおけるその他のパフォーマンス上の問題があるログハンドラーに有用です。
カスタム
カスタムログハンドラーにより、実装された新たなタイプのログハンドラーを設定することができます。カスタムハンドラーは、java.util.logging.Handler を拡張する Java クラスとして実装し、モジュール内に格納する必要があります。

11.1.11. ログフォーマッターについて

ログフォーマッターは、ログハンドラーの設定プロパティーで、そのハンドラーからのログメッセージの外観を定義します。 java.util.Formatter クラスを基にした構文を使用する文字列です。
たとえば、デフォルト設定のログフォーマッター文字列 %d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n は次のようなログメッセージを作成します。
15:53:26,546 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990

11.1.12. ログフォーマッター構文

表11.4 ログフォーマッター構文

記号 説明
%c ロギングイベントのカテゴリー
%p ログエントリーのレベル (情報やデバッグなど)
%P ログエントリーのローカライズレベル
%d 現在の日付/時刻 (yyyy-MM-dd HH:mm:ss,SSS 形式)
%r 相対時間 (ログが初期化された以降のミリ秒単位の時間)
%z タイムゾーン
%k ログリソースキー (ログメッセージのローカリゼーションに使用)
%m ログメッセージ (例外トレースを除外)
%s 単純なログメッセージ (例外トレースなし)
%e 例外スタックトレース (拡張モジュール情報なし)
%E 例外スタックトレース (拡張モジュール情報あり)
%t 現在のスレッドの名前
%n 改行文字
%C ログメソッドを呼び出すコードのクラス (低速)
%F ログメソッドを呼び出すクラスのファイル名 (低速)
%l ログメソッドを呼び出すコードのソースロケーション (低速)
%L ログメソッドを呼び出すコードの行番号 (低速)
%M ログメソッドを呼び出すコードのメソッド (低速)
%x Log4J ネスト化診断コンテキスト
%X Log4J メッセージ診断コンテキスト
%% リテラルパーセント記号 (エスケープ)