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

14.1. はじめに

14.1.1. ロギングの概要

JBoss EAP 6 は、独自の内部使用とデプロイされたアプリケーションによる使用のために設定可能な高度なロギング機能を提供します。ロギングサブシステムは JBoss LogManager を基盤とし、JBoss Logging 以外にも複数のサードパーティーアプリケーションのロギングフレームワークをサポートします。
ロギングサブシステムは、ログカテゴリーとログハンドラーのシステムを使用して設定されます。ログカテゴリーはキャプチャーするメッセージを定義し、ログハンドラーはこれらのメッセージの処理方法を定義します (ディスクへの書き込みやコンソールへの送信など)。
ロギングプロファイルは、一意に名前が付けられたロギング設定のセットを作成し、他のロギング設定に依存しないアプリケーションへ割り当てることが可能です。ロギングプロファイルの設定はメインのロギングサブシステムとほぼ同じです。

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

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

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

ブートロギングは、サーバーの「ブート中」 (起動中) に発生したイベントの記録です。
サーバー起動時に logging.properties ファイルが使用できる場合、これらのプロパティー設定はロギングサブシステムが初期化される前に発生したイベントを記録するために使用されます。この時点で、ロギングサブシステムがイベントの記録を引き継ぎます。
管理 CLI を使用するか、サーバー設定ファイルを手作業で編集して logging サブシステムを編集すると、logging.properties ファイルが更新されます。
インストールに logging.properties ファイルがない場合、ロギングサブシステムが初期化される前のブート中に通常表示されるログメッセージは失われます。ロギングシステムが初期化されると、メッセージが再度ログに表示されます。

警告

サーバーのブートに深刻な問題があり、ホストまたはプロセスコントローラーから追加のロギングが必要な場合のみ logging.properties ファイルを直接編集することが推奨されます。

14.1.4. ガベッジコレクションロギング

ガベッジコレクションロギングは、すべてのガベッジコレクションのアクティビティーをプレーンテキストのログファイルに記録します。これらのログファイルは分析を行うのに便利です。JBoss EAP 6.3 より、ガベッジコレクションロギングは IBMJDK を除くサポートされる設定の standalone モードでデフォルトで有効になっています。
ロギングはファイル EAP_HOME/standalone/log/gc.log.digit へ出力されます。ログロテーションは有効になっており、ログファイルの数は 5 に制限され、各ログファイルの最大サイズは 3 MiB に制限されています。

14.1.5. 暗黙的なロギング API の依存関係

JBoss EAP 6 のロギングサブシステムには、コンテナが暗黙的なロギング API 依存関係をデプロイメントに追加するかどうかを制御する add-logging-api-dependencies 属性が含まれています。デフォルトでは、この属性は true に設定され、暗黙的なロギング API 依存関係はすべてデプロイメントへ追加されます。false に設定すると、暗黙的なロギング API 依存関係は追加されません。
管理 CLI を使用して add-logging-api-dependencies 属性を設定できます。例は次のとおりです。
/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)

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

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

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

ログファイル説明
EAP_HOME/standalone/log/server.log
サーバーログ。サーバー起動メッセージなど、すべてのサーバーログメッセージが含まれます。
EAP_HOME/standalone/log/gc.log
ガベッジコレクションのログ。ガベッジコレクションすべての詳細が含まれます。

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

ログファイル説明
EAP_HOME/domain/log/host-controller.log
ホストコントローラーのブートログ。ホストコントローラーの起動に関連するログメッセージが含まれます。
EAP_HOME/domain/log/process-controller.log
プロセスコントローラーのブートログ。プロセスコントローラーの起動に関連するログメッセージが含まれます。
EAP_HOME/domain/servers/SERVERNAME/log/server.log
名前付きサーバーのサーバーログ。サーバー起動メッセージなど、そのサーバーのすべてのログメッセージが含まれます。

14.1.7. ロギングのフィルター式

フィルター式は、さまざまな基準に基いてログメッセージを記録するために使用されます。フィルターチェックは、常に未フォーマットのローメッセージに対して行われます。ロガーまたはハンドラーのフィルターを含めることができます。この場合は、ハンドラーに配置されたフィルターよりもロガーフィルターが優先されます。

注記

ルートロガーに対して指定された filter-spec は他のロガーによって継承されません。ハンドラーごとに filter-spec を指定する必要があります。

表14.3 ロギングのフィルター式

フィルタータイプ
expression
説明パラメーター
Accept
accept
すべてのログメッセージを許可します。
accept
Deny
deny
すべてのログメッセージを拒否します。
deny
Not
not[filter expression]
フィルター式の逆の値を返します。
1 つのフィルター式をパラメーターとして取ります。
not(match("JBAS"))
All
all[filter expression]
複数のフィルター式より連結された値を返します。
コンマ区切りの複数のフィルター式を取ります。
all(match("JBAS"),match("WELD"))
Any
any[filter expression]
複数のフィルター式より 1 つの値を返します。
コンマ区切りの複数のフィルター式を取ります。
any(match("JBAS"),match("WELD"))
Level Change
levelChange[level]
指定のレベルでログレコードを変更します。
1 つの文字列ベースのレベルを引数として取ります。
levelChange("WARN")
Levels
levels[levels]
レベルリストにあるレベルの 1 つでログメッセージをフィルターします。
コンマで区切られた複数の文字列ベースのレベルを取ります。
levels("DEBUG","INFO","WARN","ERROR")
Level Range
levelRange[minLevel,maxLevel]
指定のレベル範囲内でログメッセージをフィルターします。
フィルター式では、[ を使用して含まれる最小レベルが示され、] を使用して含まれる最大レベルが示されます。この代わりに、それぞれ ( または ) を使用して含まれるレベルを示すことが可能です。式の最初の引数が許可される最小レベルで、2 つ目の引数が許可される最大レベルになります。
以下に例を示します。
  • levelRange("DEBUG","ERROR")
    最小レベルは DEBUG よりも大きく、最大レベルは ERROR 未満でなければなりません。
  • levelRange["DEBUG","ERROR")
    最小レベルは DEBUG 以上で、最大レベルは ERROR 未満でなければなりません。
  • levelRange["INFO","ERROR"]
    最小レベルは INFO 以上で、最大レベルは ERROR 以下でなければなりません。
Match (match["pattern"])正規表現ベースのフィルター。式に指定されたパターンに対してフォーマットされていないメッセージが使用されます。
正規表現を引数として取ります。
match("JBAS\d+")
Substitute (substitute["pattern","replacement value"])最初にパターンと一致した値を指定の値に置き換えるフィルター。
式の最初の引数はパターンで、2 つ目の引数は置き換えるテキストです。
substitute("JBAS","EAP")
Substitute All (substituteAll["pattern","replacement value"])パターンと一致したすべての値を指定の値に置き換えるフィルター。
式の最初の引数はパターンで、2 つ目の引数は置き換えるテキストです。
substituteAll("JBAS","EAP")

14.1.8. ログレベル

ログレベルとは、ログメッセージの性質と重大度を示す列挙値の順序付けされたセットです。特定のログメッセージのレベルは、そのメッセージを送信するために選択したロギングフレームワークの適切なメソッドを使用して開発者が指定します。
JBoss EAP 6 は、サポートされるアプリケーションロギングフレームワークによって使用されるすべてのログレベルをサポートします。最も一般的に使用される 6 つのログレベルは、ログレベルの低い順に TRACEDEBUGINFOWARNERROR および FATAL となります。
ログレベルはログカテゴリとログハンドラーによって使用され、それらが担当するメッセージを限定します。各ログレベルには、他のログレベルに対して相対的な順番を示す数値が割り当てられています。ログカテゴリーとハンドラーにはログレベルが割り当てられ、そのレベル以上のログメッセージのみを処理します。たとえば、WARN レベルのログハンドラーは、WARNERROR、および FATAL のレベルのメッセージのみを記録します。

14.1.9. サポート対象のログレベル

表14.4 サポート対象のログレベル

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

14.1.10. ログカテゴリー

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

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

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

14.1.12. ログハンドラー

ログハンドラーは、キャプチャーされたログメッセージが JBoss EAP 6 によって記録される方法を定義します。設定可能なログハンドラーは、ConsoleFilePeriodicSizeAsyncCustom、および syslog です。

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

Console
コンソールログハンドラーは、ログメッセージをホストオペレーティングシステムの標準出力 (stdout) または標準エラー (stderr) ストリームに書き込みます。これらのメッセージは、JBoss EAP 6 がコマンドラインプロンプトから実行された場合に表示されます。オペレーティングシステムで標準出力または標準エラーストリームをキャプチャーするように設定されていない限りは、コンソールログハンドラーからのメッセージは保存されません。
File
ファイルログハンドラーは、ログメッセージを指定のファイルに書き込む、最もシンプルなログハンドラーです。
Periodic
Periodic ログハンドラーは、指定した時間が経過するまで、ログメッセージを指定ファイルに書き込みます。その時間が経過した後には、指定のタイムスタンプが追記されてファイルの名前が変更され、 ハンドラーは元の名前で新規作成されたログファイルに書き込みを継続します。
Size
サイズログハンドラーは、指定のファイルが指定サイズに到達するまで、そのファイルにログメッセージを書き込みます。ファイルが指定したサイズに到達すると、名前に数値の接頭辞を追加して名前変更され、ハンドラーは元の名前で新規作成されたログファイルに書き込みを継続します。各サイズログハンドラーは、このような方式で保管されるファイルの最大数を指定する必要があります。
Async
Async ログハンドラーは、 単一または複数のログハンドラーを対象とする非同期動作を提供するラッパーログハンドラーです。Async ログハンドラーは、待ち時間が長かったり、ネットワークファイルシステムへのログファイルの書き込みなどにパフォーマンス上の問題があるログハンドラーに対して有用です。
Custom
Custom ログハンドラーにより、実装された新たなタイプのログハンドラーを設定することができます。カスタムハンドラーは、java.util.logging.Handler を拡張する Java クラスとして実装し、モジュール内に格納する必要があります。
syslog
syslog-handler は、リモートのロギングサーバーへメッセージを送信するために使用できます。これにより、複数のアプリケーションが同じサーバーにログメッセージを送信でき、そのサーバーですべてのログメッセージを解析できます。

14.1.14. ログフォーマッター

ログフォーマッターは、ログハンドラーの設定プロパティーで、そのハンドラーからのログメッセージの表示を定義します。 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

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

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

記号説明
%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ネスト化診断コンテキスト
%Xメッセージ診断コンテキスト
%%リテラルパーセント記号 (エスケープ)