第14章 ロギングサブシステム
14.1. はじめに
14.1.1. ロギングの概要
JBoss EAP 6 は、独自の内部使用とデプロイされたアプリケーションによる使用のために設定可能な高度なロギング機能を提供します。ロギングサブシステムは JBoss LogManager を基盤とし、JBoss Logging 以外にも複数のサードパーティーアプリケーションのロギングフレームワークをサポートします。
ロギングサブシステムは、ログカテゴリーとログハンドラーのシステムを使用して設定されます。ログカテゴリーはキャプチャーするメッセージを定義し、ログハンドラーはこれらのメッセージの処理方法を定義します (ディスクへの書き込みやコンソールへの送信など)。
ロギングプロファイルは、一意に名前が付けられたロギング設定のセットを作成し、他のロギング設定に依存しないアプリケーションへ割り当てることが可能です。ロギングプロファイルの設定はメインのロギングサブシステムとほぼ同じです。
14.1.2. JBoss LogManager でサポートされるアプリケーションロギングフレームワーク
JBoss LogManager は次のロギングフレームワークをサポートします。
- JBoss Logging - JBoss EAP 6 に含まれます
- Apache Commons Logging - http://commons.apache.org/logging/
- Simple Logging Facade for Java (SLF4J) - http://www.slf4j.org/
- Apache log4j - http://logging.apache.org/log4j/1.2/
- Java SE Logging (java.util.logging) - http://download.oracle.com/javase/6/docs/api/java/util/logging/package-summary.html
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. デフォルトのログファイルの場所
これらは、デフォルトのロギング設定に対して作成されたログファイルです。デフォルトの設定では、周期的なログハンドラーを使用してサーバーログファイルが書き込まれます。
ログファイル | 説明 |
---|---|
EAP_HOME/standalone/log/server.log |
サーバーログ。サーバー起動メッセージなど、すべてのサーバーログメッセージが含まれます。
|
EAP_HOME/standalone/log/gc.log |
ガベッジコレクションのログ。ガベッジコレクションすべての詳細が含まれます。
|
ログファイル | 説明 |
---|---|
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
を指定する必要があります。
フィルタータイプ
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 つ目の引数が許可される最大レベルになります。
以下に例を示します。
|
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 つのログレベルは、ログレベルの低い順に
TRACE
、DEBUG
、INFO
、WARN
、ERROR
および FATAL
となります。
ログレベルはログカテゴリとログハンドラーによって使用され、それらが担当するメッセージを限定します。各ログレベルには、他のログレベルに対して相対的な順番を示す数値が割り当てられています。ログカテゴリーとハンドラーにはログレベルが割り当てられ、そのレベル以上のログメッセージのみを処理します。たとえば、
WARN
レベルのログハンドラーは、WARN
、ERROR
、および FATAL
のレベルのメッセージのみを記録します。
14.1.9. サポート対象のログレベル
ログのレベル | Value | 説明 |
---|---|---|
FINEST | 300 |
-
|
FINER | 400 |
-
|
TRACE | 400 |
アプリケーションの実行状態に関する詳細情報を提供するメッセージに使用します。通常、
TRACE のログメッセージはアプリケーションのデバッグ時のみにキャプチャーされます。
|
DEBUG | 500 |
アプリケーションの個別の要求または活動の進捗状況を表示するメッセージに使用します。
DEBUG のログメッセージは通常アプリケーションのデバッグ時のみにキャプチャーされます。
|
FINE | 500 |
-
|
CONFIG | 700 |
-
|
INFO | 800 |
アプリケーションの全体的な進捗状況を示すメッセージに使用します。多くの場合、アプリケーションの起動、シャットダウン、およびその他の主要なライフサイクルイベントに使用されます。
|
WARN | 900 |
エラーではないが、理想的とは見なされない状況を示すために使用されます。将来的にエラーをもたらす可能性のある状況を示します。
|
WARNING | 900 |
-
|
ERROR | 1000 |
発生したエラーの中で、現在の活動や要求の完了を妨げる可能性があるが、アプリケーション実行の妨げにはならないエラーを表示するために使用されます。
|
SEVERE | 1000 |
-
|
FATAL | 1100 |
クリティカルなサービス障害やアプリケーションのシャットダウンをもたらしたり、JBoss EAP 6 のシャットダウンを引き起こす可能性があるイベントを表示するのに使用されます。
|
14.1.10. ログカテゴリー
ログカテゴリーは、キャプチャーするログメッセージのセットと、メッセージを処理する 1 つまたは複数のログハンドラーを定義します。
キャプチャーするログメッセージは、元の Java パッケージとログレベルによって定義されます。そのパッケージ内のクラスおよびそのログレベル以下のメッセージがログカテゴリによってキャプチャーされ、指定のログハンドラーに送信されます。
ログカテゴリーは、独自のハンドラーの代わりにルートロガーのログハンドラーを任意で使用することができます。
14.1.11. ルートロガーについて
ルートロガーは、サーバーに送信された (指定レベルの) ログメッセージの中でログカテゴリーによってキャプチャーされないすべてのログメッセージをキャプチャーします。これらのメッセージは単一または複数のハンドラーに送信されます。
デフォルトでは、ルートロガーはコンソールおよび定期ログハンドラーを使用するように設定されています。定期ログハンドラーは、
server.log
ファイルに書き込むように設定されています。このファイルはサーバーログと呼ばれる場合もあります。
14.1.12. ログハンドラー
ログハンドラーは、キャプチャーされたログメッセージが JBoss EAP 6 によって記録される方法を定義します。設定可能なログハンドラーは、
Console
、File
、Periodic
、Size
、Async
、Custom
、および 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. ログフォーマッター構文
記号 | 説明 |
---|---|
%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 | メッセージ診断コンテキスト |
%% | リテラルパーセント記号 (エスケープ) |