11.3. Logging サブシステム
JBoss EAP の logging
サブシステムは ログカテゴリー および ログハンドラー のシステムを使用して設定されます。ログカテゴリーはキャプチャーするメッセージを定義します。ログハンドラーは、ディスクへの書き込みやコンソールへの送信など、これらのメッセージの対応方法を定義します。
ロギングプロファイル は、一意な名前が付けられたロギング設定の作成や、他のロギング設定に関係しないアプリケーションへの割り当てを可能にします。ロギングプロファイルの設定は、メインの logging
サブシステムとほぼ同じです。
11.3.1. ルートロガー
JBoss EAP のルートロガーは、ログカテゴリーによってキャプチャーされないサーバーへ送信されたすべてのログメッセージ (指定のログレベル以上) をキャプチャーします。
デフォルトでは、ルートロガーはコンソールおよび周期ログハンドラーを使用するように設定されます。周期ログハンドラーは、server.log
ファイルへ書き込むよう設定されます。このファイルはサーバーログとも呼ばれます。
詳細は「ルートロガーの設定」を参照してください。
11.3.2. ログカテゴリー
ログカテゴリーは、キャプチャーするログメッセージのセットと、メッセージを処理する 1 つ以上のログハンドラーを定義します。
キャプチャーするログメッセージは、指定された元の Java パッケージとログレベルによって定義されます。そのパッケージのクラスおよびそのログレベル以上のメッセージがログカテゴリーによってキャプチャーされ、指定のログハンドラーに送信されます。
通常、ログカテゴリーは Java パッケージとクラス名ですが、Logger.getLogger(LOGGER_NAME)
メソッドによって指定された名前をすべて使用できます。
ログカテゴリーは、独自のハンドラーの代わりにルートロガーのログハンドラーを任意で使用することができます。
詳細は「ログカテゴリーの設定」を参照してください。
11.3.3. ログハンドラー
ログハンドラーはキャプチャーしたメッセージの記録方法を定義します。使用できるログハンドラーの種類は console、file、periodic、size、periodic size、syslog、 custom、および async です。
ログハンドラーは、アクティブにするために少なくとも 1 つのロガーに追加する必要があります。
ログハンドラーの種類
- Console
-
Console ログハンドラーは、ログメッセージをホストオペレーティングシステムの標準出力 (
stdout
) または標準エラー (stderr
) ストリームに書き込みます。これらのメッセージは、JBoss EAP がコマンドラインプロンプトから実行された場合に表示されます。オペレーティングシステムで標準出力または標準エラーストリームをキャプチャーするように設定されていない限り、Console ログハンドラーからのメッセージは保存されません。 - File
- File ログハンドラーは、ログメッセージを指定のファイルに書き込みます。
- Periodic
- Periodic ログハンドラーは、指定した時間が経過するまで、ログメッセージを指定ファイルに書き込みます。その時間が経過した後、指定のタイムスタンプが追記されてファイルの名前が変更され、 ハンドラーは元の名前で新規作成されたログファイルに書き込みを継続します。
- Size
- Size ログハンドラーは、指定したファイルが指定したサイズに達するまで、そのファイルにログメッセージを書き込みます。ファイルが指定したサイズに達すると、数値の接尾辞が付いて名前が変更され、ハンドラーは元の名前で新規作成されたログファイルに書き込みを継続します。各サイズログハンドラーは、この方式で保管されるファイルの最大数を指定する必要があります。
- Periodic Size
Periodic Size ログハンドラーは、ファイルが指定のサイズに達するまで、または指定の期間が経過するまで、ログメッセージを名前の付いたファイルに書き込みます。その後、ファイルの名前が変更され、ハンドラーは元の名前で新規作成されたログファイルに書き込みを継続します。
これは Periodic と Size ログハンドラーの組み合わせで、組み合わされた属性をサポートします。
- Syslog
- syslog ハンドラーは、リモートのロギングサーバーへメッセージを送信するために使用できます。これにより、複数のアプリケーションが同じサーバーにログメッセージを送信でき、そのサーバーですべてのログメッセージを解析できます。
- Socket
- ソケットログハンドラーを使用して、ログメッセージをソケット上でリモートロギングサーバーに送信できます。ソケットは TCP または UDP ソケットになります。
- Custom
-
カスタムログハンドラーにより、実装された新たなタイプのログハンドラーを設定することができます。カスタムハンドラーは、
java.util.logging.Handler
を拡張する Java クラスとして実装し、モジュール内に格納する必要があります。Log4J アペンダーをカスタムログハンドラーとして使用することもできます。 - Async
- Async ログハンドラーは、 単一または複数のログハンドラーを対象とする非同期動作を提供するラッパーログハンドラーです。Async ログハンドラーは、待ち時間が長かったり、ネットワークファイルシステムへのログファイルの書き込みなどにパフォーマンス上の問題があるログハンドラーに対して有用です。
各ログハンドラーの設定に関する詳細は、「ログハンドラーの設定」の項を参照してください。
11.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
は、最大ログレベルであり、そのレベルのメッセージのみを含みます。ロギングの量は最も少なくなります。
11.3.5. ログフォーマッター
フォーマッターはログメッセージのフォーマットに使用されます。named-formatter
属性を使用するとフォーマッターをログハンドラーに割り当てできます。ログハンドラー設定の詳細は「ログハンドラーの設定」を参照してください。
logging サブシステムには 4 種類のフォーマッターが含まれます。
パターンフォーマッター
パターンフォーマッターは、ログメッセージをプレーンテキストでフォーマットするために使用されます。ログハンドラーの named-formatter
属性としてフォーマットを使用する他に、あらかじめフォーマッターリソースを作成する必要なく formatter
属性として使用することもできます。パターン構文に関する詳細は「パターンフォーマッターのフォーマット文字」を参照してください。
パターンフォーマッターの設定方法は「パターンフォーマッターの設定」を参照してください。
JSON フォーマッター
JSON フォーマッターは、ログメッセージを JSON 形式でフォーマットするために使用されます。
JSON フォーマッターの設定方法は「JSON フォーマッターの設定」を参照してください。
XML フォーマッター
XML ログフォーマッターは、ログメッセージを XML 形式でフォーマットするために使用されます。
XML フォーマッターの設定方法は「XML フォーマッターの設定」を参照してください。
カスタムフォーマッター
ハンドラーと使用するカスタムフォーマッターです。ほとんどのログレコードは printf 形式でフォーマットされることに注意してください。メッセージを適切にフォーマットするには、org.jboss.logmanager.ExtLogRecord#getFormattedMessage()
の呼び出しが必要になることがあります。
カスタムログフォーマッターの設定方法は「カスタムログフォーマッターの設定」を参照してください。
11.3.6. フィルター式
フィルター式は filter-spec
属性を使用して設定され、さまざまな基準に基いてログメッセージを記録するために使用されます。フィルターチェックは、常に未フォーマットの raw メッセージに対して行われます。ロガーまたはハンドラーのフィルターを含めることができますが、ハンドラーに配置されたフィルターよりもロガーフィルターが優先されます。
ルートロガーに対して指定された filter-spec
は他のロガーによって継承されません。ハンドラーごとに filter-spec
を指定する必要があります。
表11.3 ロギングのフィルター式
フィルター式 | 説明 |
---|---|
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\")")
11.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 EAP『開発ガイド』の「暗黙的なモジュール依存関係」の項を参照してください。