第13章 ロギングサブシステム
13.1. はじめに
13.1.1. ロギングの概要
JBoss EAP 6 は、独自の内部使用とデプロイされたアプリケーションによる使用のために設定可能な高度なロギング機能を提供します。ロギングサブシステムは JBoss LogManager を基盤とし、JBoss Logging 以外にも複数のサードパーティーアプリケーションのロギングフレームワークをサポートします。
ロギングサブシステムは、ログカテゴリーとログハンドラーのシステムを使用して設定されます。ログカテゴリーはキャプチャーするメッセージを定義し、ログハンドラーはこれらのメッセージの処理方法を定義します (ディスクへの書き込みやコンソールへの送信など)。
ロギングプロファイルはバージョン 6.1.0 に追加された機能で、一意に名前が付けられたロギング設定のセットを作成し、他のロギング設定に依存しないアプリケーションへ割り当てることが可能です。ロギングプロファイルの設定はメインのロギングサブシステムとほぼ同じです。
すべての設定は管理コンソール内または CLI ツールを使用して実行できます。
13.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
13.1.3. ブートロギングの設定
ブートロギングは、サーバーの起動中 (または「ブート中」) に発生したイベントの記録です。
ブートロギングは
logging.properties
ファイルを編集して設定できます。このファイルは、標準的な Java プロパティーファイルであり、テキストエディターで編集できます。ファイルの各行の形式は property=value
です。
logging.properties
ファイルへの完全パスは EAP_HOME/domain/configuration/logging.properties
または EAP_HOME/standalone/configuration/logging.properties
のいずれかになります。これは JBoss EAP 6 を管理対象ドメインまたはスタンドアロンサーバーとして稼動しているかどうかによって異なります。
13.1.4. デフォルトのログファイルの場所
これらは、デフォルトのロギング設定に対して作成されたログファイルです。デフォルトの設定では、周期的なログハンドラーを使用してサーバーログファイルが書き込まれます。
表13.1 スタンドアロンサーバーのデフォルトログファイル
ログファイル | 説明 |
---|---|
EAP_HOME/standalone/log/server.log |
サーバーログ。サーバー起動メッセージなど、すべてのサーバーログメッセージが含まれます。
|
表13.2 管理対象ドメイン用のデフォルトログファイル
ログファイル | 説明 |
---|---|
EAP_HOME/domain/log/host-controller.log |
ホストコントローラーのブートログ。ホストコントローラーの起動に関連するログメッセージが含まれます。
|
EAP_HOME/domain/log/process-controller.log |
プロセスコントローラーのブートログ。プロセスコントローラーの起動に関連するログメッセージが含まれます。
|
EAP_HOME/domain/servers/SERVERNAME/log/server.log |
名前付きサーバーのサーバーログ。サーバー起動メッセージなど、そのサーバーのすべてのログメッセージが含まれます。
|
13.1.5. ロギングのフィルター式
表13.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 つ目の引数が許可される最大レベルになります。
|
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")
|
13.1.6. ログレベル
ログレベルとは、ログメッセージの性質と重大度を示す列挙値の順序付けされたセットです。 特定のログメッセージのレベルは、そのメッセージを送信するために選択したロギングフレームワークの適切なメソッドを使用して開発者が指定します。
JBoss EAP 6 は、サポートされるアプリケーションロギングフレームワークによって使用されるすべてのログレベルをサポートします。最も一般的に使用される 6 つのログレベルは、ログレベルの低い順に
TRACE
、DEBUG
、INFO
、WARN
、ERROR
および FATAL
となります。
ログレベルはログカテゴリとログハンドラーによって使用され、それらが担当するメッセージを限定します。各ログレベルには、他のログレベルに対して相対的な順番を示す数値が割り当てられています。ログカテゴリーとハンドラーにはログレベルが割り当てられ、そのレベル以上のログメッセージのみを処理します。たとえば、
WARN
レベルのログハンドラーは、WARN
、ERROR
、および FATAL
のレベルのメッセージのみを記録します。
13.1.7. サポートされているログレベル
表13.4 サポートされているログレベル
ログレベル | 値 | 説明 |
---|---|---|
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 のシャットダウンを引き起こす可能性があるイベントを表示するのに使用します。
|
13.1.8. ログカテゴリー
ログカテゴリーは、キャプチャーするログメッセージのセットと、メッセージを処理する単一または複数のログハンドラーを定義します。
キャプチャーするログメッセージは、元の Java パッケージとログレベルによって定義されます。そのパッケージ内のクラスおよびそのログレベル以下のメッセージがログカテゴリによってキャプチャーされ、指定のログハンドラーに送信されます。
ログカテゴリーは任意で独自のハンドラーの代わりにルートロガーのログハンドラーを使用することができます。
13.1.9. ルートロガー
ルートロガーは、サーバーに送信された (指定レベルの) 全ログメッセージの中でログカテゴリによってキャプチャーされなかったログメッセージをキャプチャーします。これらのメッセージは単一または複数のハンドラーに送信されます。
デフォルトでは、ルートロガーはコンソールおよび定期ログハンドラーを使用するように設定されています。定期ログハンドラーは、
server.log
ファイルに書き込むように設定されています。このファイルはサーバーログと呼ばれる場合もあります。
13.1.10. ログハンドラー
ログハンドラーはキャプチャーされたメッセージが JBoss EAP 6 によって記録される方法を定義します。設定可能なログハンドラーは
Console
、File
、Periodic
、Size
、Async
および Custom
の 6 種類です。
13.1.11. ログハンドラーのタイプ
- コンソール (Console)
- コンソールログハンドラーは、ログメッセージをホストオペレーティングシステムの標準出力 (stdout) または標準エラー (stderr) ストリームに書き込みます。これらのメッセージは、JBoss EAP 6 がコマンドラインプロンプトから実行された場合に表示されます。オペレーティングシステムで標準出力または標準エラーストリームをキャプチャーするように設定されていない限りは、コンソールログハンドラーからのメッセージは保存されません。
- ファイル
- ファイルログハンドラーは、ログメッセージを指定のファイルに書き込む、最もシンプルなログハンドラーです。
- 定期 (Periodic)
- 定期ログハンドラーは、指定した時間が経過するまで、ログメッセージを指定ファイルに書き込みます。その時間が経過した後には、指定のタイムスタンプが追記されてファイルの名前が変更され、 ハンドラーは元の名前で新規作成されたログファイルに書き込みを継続します。
- サイズ (Size)
- サイズログハンドラーは、指定のファイルが指定サイズに到達するまで、そのファイルにログメッセージを書き込みます。ファイルが指定したサイズに到達すると、名前に数値の接頭辞を追加して名前変更され、ハンドラーは元の名前で新規作成されたログファイルに書き込みを継続します。各サイズログハンドラーは、このような方式で保管されるファイルの最大数を指定する必要があります。
- 非同期 (Async)
- 非同期ログハンドラーは、 単一または複数のログハンドラーを対象とする非同期動作を提供するラッパーログハンドラーです。非同期ログハンドラーは高レイテンシ、もしくはネットワークファイルシステムへのログファイル書き込みなどにおけるその他のパフォーマンス上の問題があるログハンドラーに有用です。
- カスタム (Custom)
- カスタムログハンドラーにより、実装された新たなタイプのログハンドラーを設定することができます。カスタムハンドラーは、
java.util.logging.Handler
を拡張する Java クラスとして実装し、モジュール内に格納する必要があります。 - syslog
- syslog-handler は、リモートのロギングサーバーへメッセージを送信するために使用できます。これにより、複数のアプリケーションが同じサーバーにログメッセージを送信でき、そのサーバーですべてのログメッセージを解析できます。
13.1.12. ログフォーマッター
ログフォーマッターは、ログハンドラーの設定プロパティーで、そのハンドラーからのログメッセージの表示を定義します。
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
13.1.13. ログフォーマッター構文
表13.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 | Log4J ネスト化診断コンテキスト |
%X | Log4J メッセージ診断コンテキスト |
%% | リテラルパーセント記号 (エスケープ) |