12.3. Logging サブシステム
JBoss EAP の logging
サブシステムは ログカテゴリー および ログハンドラー のシステムを使用して設定されます。ログカテゴリーはキャプチャーするメッセージを定義します。ログハンドラーは、ディスクへの書き込みやコンソールへの送信など、これらのメッセージの対応方法を定義します。
ロギングプロファイル は、一意な名前が付けられたロギング設定の作成や、他のロギング設定に関係しないアプリケーションへの割り当てを可能にします。ロギングプロファイルの設定は、メインの logging
サブシステムとほぼ同じです。
12.3.1. ルートロガー
JBoss EAP のルートロガーは、ログカテゴリーによってキャプチャーされないサーバーへ送信されたすべてのログメッセージ (指定のログレベル以上) をキャプチャーします。
デフォルトでは、ルートロガーはコンソールおよび周期ログハンドラーを使用するように設定されます。周期ログハンドラーは、server.log
ファイルへ書き込むよう設定されます。このファイルはサーバーログとも呼ばれます。
詳細は ルートロガーの設定 を参照してください。
12.3.2. ログカテゴリー
ログカテゴリーは、キャプチャーするログメッセージのセットと、メッセージを処理する 1 つ以上のログハンドラーを定義します。
キャプチャーするログメッセージは、指定された元の Java パッケージとログレベルによって定義されます。そのパッケージのクラスおよびそのログレベル以上のメッセージがログカテゴリーによってキャプチャーされ、指定のログハンドラーに送信されます。
通常、ログカテゴリーは Java パッケージとクラス名ですが、Logger.getLogger(LOGGER_NAME)
メソッドによって指定された名前をすべて使用できます。
ログカテゴリーは、独自のハンドラーの代わりにルートロガーのログハンドラーを任意で使用することができます。
詳細は ログカテゴリーの設定 を参照してください。
12.3.3. ログハンドラー
ログハンドラーはキャプチャーしたメッセージの記録方法を定義します。使用できるログハンドラーの種類は console、file、periodic、size、periodic size、syslog、 custom、および async です。
ログハンドラーは、アクティブにするために少なくとも 1 つのロガーに追加する必要があります。
ログハンドラーの種類
- コンソール
-
Console ログハンドラーは、ログメッセージをホストオペレーティングシステムの標準出力 (
stdout
) または標準エラー (stderr
) ストリームに書き込みます。これらのメッセージは、JBoss EAP がコマンドラインプロンプトから実行された場合に表示されます。オペレーティングシステムで標準出力または標準エラーストリームをキャプチャーするように設定されていない限り、Console ログハンドラーからのメッセージは保存されません。 - File
- File ログハンドラーは、ログメッセージを指定のファイルに書き込みます。
- Periodic
- Periodic ログハンドラーは、指定した時間が経過するまで、ログメッセージを指定ファイルに書き込みます。その時間が経過した後、指定のタイムスタンプが追記されてファイルの名前が変更され、 ハンドラーは元の名前で新規作成されたログファイルに書き込みを継続します。
- Size
- Size ログハンドラーは、指定したファイルが指定したサイズに達するまで、そのファイルにログメッセージを書き込みます。ファイルが指定したサイズに達すると、数値の接尾辞が付いて名前が変更され、ハンドラーは元の名前で新規作成されたログファイルに書き込みを継続します。各サイズログハンドラーは、この方式で保管されるファイルの最大数を指定する必要があります。
- Periodic Size
Periodic Size ログハンドラーは、ファイルが指定のサイズに達するまで、または指定の期間が経過するまで、ログメッセージを名前の付いたファイルに書き込みます。その後、ファイルの名前が変更され、ハンドラーは元の名前で新規作成されたログファイルに書き込みを継続します。
これは Periodic と Size ログハンドラーの組み合わせで、組み合わされた属性をサポートします。
- Syslog
- syslog ハンドラーは、リモートのロギングサーバーへメッセージを送信するために使用できます。これにより、複数のアプリケーションが同じサーバーにログメッセージを送信でき、そのサーバーですべてのログメッセージを解析できます。
- Custom
-
カスタムログハンドラーにより、実装された新たなタイプのログハンドラーを設定することができます。カスタムハンドラーは、
java.util.logging.Handler
を拡張する Java クラスとして実装し、モジュール内に格納する必要があります。Log4J アペンダーをカスタムログハンドラーとして使用することもできます。 - Async
- Async ログハンドラーは、 単一または複数のログハンドラーを対象とする非同期動作を提供するラッパーログハンドラーです。Async ログハンドラーは、待ち時間が長かったり、ネットワークファイルシステムへのログファイルの書き込みなどにパフォーマンス上の問題があるログハンドラーに対して有用です。
各ログハンドラーの設定に関する詳細は、ログハンドラーの設定 の項を参照してください。
12.3.4. ログレベル
ログレベルとは、ログメッセージの性質と重大度を示す列挙値です。特定のログメッセージのレベルは、そのメッセージを送信するために選択したロギングフレームワークの適切なメソッドを使用して開発者が指定できます。
JBoss EAP は、サポートされるアプリケーションロギングフレームワークによって使用されるすべてのログレベルをサポートします。最も一般的に使用されるログレベルは、ログレベルの低い順に TRACE
、DEBUG
、INFO
、WARN
、ERROR
および FATAL
となります。
ログレベルはログカテゴリーとログハンドラーによって使用され、それらが担当するメッセージを限定します。各ログレベルには、他のログレベルに対して相対的な順番を示す数値が割り当てられています。ログカテゴリーとハンドラーにはログレベルが割り当てられ、そのレベル以上のログメッセージのみを処理します。たとえば、WARN
レベルのログハンドラーは、WARN
、ERROR
、および FATAL
のレベルのメッセージのみを記録します。
サポート対象のログレベル
ログのレベル | Value | 説明 |
---|---|---|
ALL | Integer.MIN_VALUE | すべてのログメッセージを提供します。 |
FINEST | 300 | - |
FINER | 400 | - |
TRACE | 400 |
|
DEBUG | 500 |
|
FINE | 500 | - |
CONFIG | 700 | - |
INFO | 800 |
|
WARN | 900 |
|
WARNING | 900 | - |
ERROR | 1000 |
|
SEVERE | 1000 | - |
FATAL | 1100 |
|
OFF | Integer.MAX_VALUE | ログメッセージを表示しません。 |
ALL
は、最低ログレベルであり、すべてのログレベルのメッセージを含みます。ロギングの量は最も多くなります。
FATAL
は、最大ログレベルであり、そのレベルのメッセージのみを含みます。ロギングの量は最も少なくなります。
12.3.5. ログフォーマッター
ログフォーマッターはハンドラーでのログメッセージの形式を定義します。java.util.logging.Formatter
クラスに基づいた構文を使用した文字列です。
たとえば、デフォルトの設定はサーバーログへのロギングメッセージのログフォーマッター文字列として %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n
を使用します。これにより、以下に示すようなログメッセージが作成されます。
2016-03-18 15:49:32,075 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990
ログフォーマッタの設定の詳細は、名前付きパターンフォーマッタの設定 または カスタムログフォーマッタの設定を 参照してください。
ログフォーマッタ文字列で使用される構文については、以下の表を参照してください。
ログフォーマッター構文
記号 | 説明 |
---|---|
%c | ロギングイベントのカテゴリー。 |
%p | ログエントリーのレベル (INFO、DEBUG など) |
%P | ログエントリーのローカライズレベル。 |
%d |
現在の日付/時間 ( |
%r | 相対時間 (ログ初期化以降のミリ秒単位の時間)。 |
%z |
日付 ( |
%k | ログリソースキー (ログメッセージのローカリゼーションに使用)。 |
%m | ログメッセージ (例外トレースを含む)。 |
%s | 単純なログメッセージ (例外トレースなし)。 |
%e | 例外スタックトレース (拡張モジュール情報なし)。 |
%E | 例外スタックトレース (拡張モジュール情報あり)。 |
%t | 現在のスレッドの名前。 |
%n | 改行文字。 |
%C | ログメソッドを呼び出すコードのクラス (低速)。 |
%F | ログメソッドを呼び出すクラスのファイル名 (低速)。 |
%l | ログメソッドを呼び出すコードのソースロケーション (低速)。 |
%L | ログメソッドを呼び出すコードの行番号 (低速)。 |
%M | ログメソッドを呼び出すコードのメソッド (低速)。 |
%x | ネスト化診断コンテキスト。 |
%X | メッセージ診断コンテキスト。 |
%% |
リテラルパーセント ( |
12.3.6. フィルター式
フィルター式は filter-spec
属性を使用して設定され、さまざまな基準に基づいてログメッセージを記録するために使用されます。フィルターチェックは、常に未フォーマットの raw メッセージに対して行われます。ロガーまたはハンドラーのフィルターを含めることができますが、ハンドラーに配置されたフィルターよりもロガーフィルターが優先されます。
ルートロガーに対して指定された filter-spec
は他のロガーによって継承されません。ハンドラーごとに filter-spec
を指定する必要があります。
フィルター式 | 説明 |
---|---|
accept | すべてのログメッセージを許可します。 |
deny | すべてのログメッセージを拒否します。 |
not[filter expression] | 単一のフィルター式の逆の値を返します。以下に例を示します。
|
all[filter expression] | フィルター式のコンマ区切りリストから連結された値を返します。以下に例を示します。
|
any[filter expression] | フィルター式のコンマ区切りリストから 1 つの値を返します。以下に例を示します。
|
levelChange[level] | 指定のレベルでログレコードを更新します。以下に例を示します。
|
levels[levels] | レベルのコンマ区切りリストにあるレベルの 1 つでログメッセージをフィルターします。以下に例を示します。
|
levelRange[minLevel,maxLevel] |
指定されたレベル範囲内でログメッセージをフィルターします。
|
match["pattern"] | 提供される正規表現を使用してログメッセージをフィルターします。以下に例を示します。
|
substitute["pattern","replacement value"] | 最初にパターン (最初の引数) と一致した値を代替テキスト (2 番目の引数) に置き換えるフィルター。以下に例を示します。
|
substituteAll["pattern","replacement value"] | パターン (最初の引数) と一致したすべての値を代替テキスト (2 番目の引数) に置き換えるフィルター。以下に例を示します。
|
管理 CLI を使用してフィルター式を設定する場合、値が文字列として正しく処理されるよう、フィルターテキストのコンマと引用符を必ずエスケープしてください。コンマと引用符の前にバックスラッシュ (\
) を付け、式全体を引用符で囲む必要があります。以下は substituteAll("WFLY","YLFW")
を適切にエスケープした例になります。
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=filter-spec, value="substituteAll(\"WFLY\"\,\"YLFW\")")
12.3.7. 暗黙的なロギングの依存関係
JBoss EAP の logging
サブシステムはデフォルトで暗黙的なロギング API 依存関係をデプロイメントに追加します。add-logging-api-dependencies
属性を使用すると、この暗黙的な依存関係をデプロイメントに追加するかどうかを制御できます。 この属性はデフォルトでは true
に設定されています。
管理 CLI を使用して add-logging-api-dependencies
属性を false
に設定すると、暗黙的なロギング API 依存関係がデプロイメントに追加されないようになります。
/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)
logging
サブシステムの暗黙的な依存関係については、JBoss EAPDevelopment Guideの Implicit Module Dependencies の項を参照してください。