10.3. ロギングサブシステム設定の概要
JBoss EAP logging サブシステムは、設定に ログカテゴリー と ログハンドラー を使用します。ログカテゴリーはキャプチャーするメッセージを指定し、ログハンドラーはメッセージの処理方法 (ディスクに書き込む、コンソールに送信するなど) を定義します。
アプリケーションロギングプロファイル を使用すると、メインのロギング設定とは別に、単一または複数のデプロイメントに割り当てることができる、一意の名前のロギング設定を作成できます。ロギングプロファイルの設定は、メインの logging サブシステムの設定とほぼ同じです。
10.3.1. ルートロガー設定 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP ルートロガーは、ロガーがキャプチャーしない、指定されたログレベル以上のすべてのログメッセージをキャプチャーします。ただし、定義されたロガーで use-parent-handlers が true に設定され、ハンドラーも定義されている場合は、定義されたロガーとルートロガーの両方がメッセージの処理に使用されます。
デフォルトでは、ルートロガーは console と periodic ログハンドラーを使用して、server.log ファイルに書き込みます。一般的に、このファイルはサーバーログと呼ばれます。
10.3.2. JBoss EAP のログカテゴリー リンクのコピーリンクがクリップボードにコピーされました!
ログカテゴリーは、キャプチャーするログメッセージのセットと、メッセージを処理する 1 つ以上のログハンドラーを定義します。
ログメッセージは、指定された発生元とログレベルによって決定されます。任意の文字列値を指定できます。ただし、パッケージ名またはクラス名が推奨されます。ロガー名はドット表記を使用して指定されます (例: Logger.getLogger("example.logger.name"))。ログマネージャーは名前の各セクションを処理し、一致する設定をチェックします。一致が検出され、use-parent-handlers が false に設定されている場合、プロセスは停止します。設定が定義されていないか、use-parent-handlers が true に設定されている場合、デフォルトでは、ログマネージャーは "example.logger" などの親名のチェックを続行します。ロガーの設定は、パッケージ名やクラス名ではなく、ロガーの作成方法によって異なります。
通常、ログカテゴリーは Java パッケージとクラス名に基づきますが、Logger.getLogger(LOGGER_NAME) メソッドで指定された名前をすべて使用できます。
ロガーにはハンドラーを割り当てることができます。use-parent-handlers が false に設定されている場合、ロガーがログに記録可能であると判断した場合でも、上位レベルのロガーはメッセージを処理しません。たとえば、ロガー名が org.jboss.as.logging で、use-parent-handlers=false が設定されている場合、org.jboss.as ロガーはチェックされません。
10.3.3. JBoss EAP のログハンドラー リンクのコピーリンクがクリップボードにコピーされました!
ログハンドラーは、エントリーの宛先と形式を指定して、キャプチャーされたログメッセージを記録する方法を定義します。ログハンドラーは、タイプごとにさまざまなニーズに合わせた異なる目的を果たすため、効果的なログ設定を行うには、ログハンドラーのタイプを理解することが不可欠です。
ログハンドラーをアクティブにするには、少なくとも 1 つのロガーに追加する必要があります。
10.3.3.1. ログハンドラーのタイプ リンクのコピーリンクがクリップボードにコピーされました!
ログハンドラーは、いくつかのタイプに分類され、タイプに基づきログエントリーの処理方法と保存方法が決定されます。各タイプには、さまざまなロギング要件を満たすための独自の機能があります。
-
コンソール: ログメッセージをホストオペレーティングシステムの標準出力 (
stdout) または標準エラー (stderr) ストリームに書き込みます。これらのメッセージは、JBoss EAP がコマンドラインプロンプトから実行された場合に表示されます。オペレーティングシステムで標準出力または標準エラーストリームをキャプチャーするように設定されていない限り、console ログハンドラーからのメッセージは保存されません。 - File: 指定されたファイルにログメッセージを書き込みます。
- Periodic: 指定された期間が経過するまで、ログメッセージを名前付きファイルに書き込みます。その後、ファイル名はタイムスタンプ付きで変更され、ハンドラーは元の名前で新しく作成されたログファイルに書き込みを続けます。
- Size: ファイルが指定されたサイズに達するまで、名前付きファイルにログメッセージを書き込みます。ファイルが指定されたサイズに達すると、数値の接尾辞が付いて名前が変更され、ハンドラーは元の名前で新規作成されたログファイルに書き込みを継続します。各サイズのログハンドラーでは、この方法で保持するファイルの最大数を指定する必要があります。
- Periodic Size: ファイルが指定されたサイズに達するか、指定された期間が経過するまで、ログメッセージを名前付きファイルに書き込みます。その後、ハンドラーはファイルの名前を変更し、元の名前で新しく作成されたログファイルへの書き込みを続行します。このハンドラーは、periodic ログハンドラーと size ログハンドラーの両方の機能を組み合わせています。
- Syslog: リモートロギングサーバーにメッセージを送信します。これにより、複数のアプリケーションが解析のためにログメッセージを同じサーバーに送信できるようになります。
- Socket: ログメッセージをソケット経由でリモートロギングサーバーに送信します。これには TCP または UDP ソケットのいずれかを使用できます。
-
Custom: 新しいタイプのログハンドラーを設定できます。カスタムハンドラーは、
java.util.logging.Handlerを拡張する Java クラスとして実装し、モジュール内に格納される必要があります。Log4J アペンダーをカスタムログハンドラーとして使用することもできます。 - Async: 1 つ以上の他のログハンドラーに対して非同期動作を提供します。これは、ネットワークファイルシステムへのログファイルの書き込みなど、レイテンシーが長かったりパフォーマンスの問題が発生したりする可能性があるログハンドラーに役立ちます。
10.3.4. JBoss EAP でサポートされるログレベル リンクのコピーリンクがクリップボードにコピーされました!
ログレベルとは、ログメッセージの性質と重大度を示す列挙値です。開発者は、選択したロギングフレームワークの適切なメソッドを使用して、ログメッセージのレベルを指定してメッセージを送信できます。
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 は最高のログレベルであり、そのレベルのメッセージのみが含まれます。ロギングの量は最も少なくなります。
10.3.5. JBoss EAP のログフォーマッター リンクのコピーリンクがクリップボードにコピーされました!
ログフォーマッターは、ログメッセージをフォーマットするために使用されます。named-formatter 属性を使用して、フォーマッターをログハンドラーに割り当てることができます。
10.3.5.1. ログフォーマッターのタイプ リンクのコピーリンクがクリップボードにコピーされました!
ログフォーマッターは、いくつかのタイプに分類され、そのタイプによりログエントリーのフォーマット方法が決まります。
ロギングサブシステムには 4 タイプのフォーマッターが含まれます。
-
パターンフォーマッター: ログメッセージをプレーンテキストでフォーマットします。ログハンドラーの
named-formatter属性としてフォーマットを使用するだけでなく、あらかじめフォーマッターリソースを作成する必要のないformatter属性として使用することもできます。 - JSON フォーマッター: ログメッセージを JSON 形式でフォーマットします。
- XML フォーマッター: ログメッセージを XML 形式でフォーマットします。
-
カスタムフォーマッター: ハンドラーと使用します。ほとんどのログレコードは printf 形式でフォーマットされます。フォーマッターでは、適切にフォーマットするためには
org.jboss.logmanager.ExtLogRecord#getFormattedMessage()を呼び出す必要がある場合があります。
10.3.6. JBoss EAP におけるロギングに使用するフィルター式 リンクのコピーリンクがクリップボードにコピーされました!
フィルター式は filter-spec 属性を使用して設定され、さまざまな基準に基づきログメッセージを記録するために使用されます。フィルターは、生のフォーマットされていないメッセージに適用されます。ロガーまたはハンドラーにフィルターを追加できますが、ロガーフィルターはハンドラーに設定されたフィルターよりも優先されます。
ルートロガーに対して指定された 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\")")
10.3.7. JBoss EAP における暗黙的なロギング依存関係 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP の logging サブシステムはデフォルトで暗黙的なロギング API 依存関係をデプロイメントに追加します。add-logging-api-dependencies 属性を使用すると、この暗黙的な依存関係をデプロイメントに追加するかどうかを管理できます。この属性は、デフォルトで true に設定されています。
これらの依存関係が追加されないようにするには、管理 CLI を使用して add-logging-api-dependencies 属性を false に設定します。
/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)