バイナリー・ロギング

バイナリー・ロギングは、WebSphere Application Server traditional の High Performance Extensible Logging (HPEL) テクノロジーを基にした高性能のログおよびトレース機能です。

概要

注: バイナリー・ロギング機能を使用するには、使用可能にする必要があります。

バイナリー・ロギングは、アプリケーション・サーバーまたはユーザー・アプリケーションが生成するログ、トレース、System.err、および System.out 情報の保管およびアクセス用の便利なメカニズムを提供します。 デフォルトのログおよびトレース機能の代わりとなり、通常は messages.log および trace.log という名前の JVM ログおよび診断トレース・ファイルを提供します。

ログおよびトレースのストレージ

バイナリー・ロギングには、ログ・データ・リポジトリーとトレース・データ・リポジトリーがあります。 次の図で、アプリケーションとアプリケーション・サーバーがどのようにログおよびトレース情報を保管するかについて示します。

HPEL および基本ログにおけるログおよびトレースの保管
上の図では、以下が示されています。
  1. アプリケーション・コードのロギングはルート・ロガーに収集されます。ルート・ロガーは、このロギング・データを HPEL ロギング・フレームワークのログ/トレース・データ・ハンドラーおよびデフォルトのロギング・フレームワークのログ/トレース・データ・ハンドラーに送信します。
  2. アプリケーション・サーバーのロギング・データはロガーによって収集され、シリアル周辺装置インターフェース (SPI) に送信されます。SPI は、このロギング・データを HPEL ロギング・フレームワークのログ/トレース・サービスおよびデフォルトのロギング・フレームワークのログ/トレース・サービスに送信します。
  3. 各フレームワークのログ/トレース・サービスは、このデータをそのフレームワークのログ/トレース・データ・ハンドラーに送信します。
  4. HPEL ロギング・フレームワークのログ/トレース・データ・ハンドラーは、このデータをそのフレームワーク内のログ・データ・リポジトリー、トレース・データ・リポジトリー、およびテキスト・ログに送信します。
  5. デフォルトのロギング・フレームワークのログ/トレース・データ・ハンドラーは、このデータをそのフレームワーク内のメッセージ・ログとトレース・ログに送信します。
  6. 各フレームワークのデータはコンソール・ログにも送信されます。
ログ・データ・リポジトリー

ログ・データ・リポジトリーは、ログ・レコード用の保管機能です。 通常、ログ・データは、管理者が確認するためのものです。 これには、アプリケーションまたはサーバーが System.out、System.err、レベル LOG_INFO 以上 (LOG_INFO、LOG_WARNING、および LOG_ERROR を含む) での OSGi ロギング・サービス、またはレベル Detail 以上 (Detail、Config、Info、Audit、Warning、Severe、Fatal、およびレベル Detail 以上のすべてのカスタム・レベル) での java.util.logging に書き込むすべての情報が含まれます。

トレース・データ・リポジトリー

トレース・データ・リポジトリーは、トレース・レコード用の保管機能です。 トレース・データは通常、アプリケーション・プログラマーまたは WebSphere® Application Server サポート・チームが使用するためのものです。 これには、アプリケーションまたはサーバーが、詳細レベルより低いレベル (詳細レベル、詳細レベル、詳細レベルより低いカスタム・レベルを含む) のレベル LOG_DEBUG または java.util.logging で OSGi ロギング・サービスに書き込むすべての情報が含まれます。

ログおよびトレースのパフォーマンス

バイナリー・ロギングは、デフォルトのログおよびトレース機能よりもずっと優れたものになるよう設計され、テストされています。 デフォルトのログおよびトレース・フレームワークではなく、バイナリー・ロギングを使用することによって、トレースを有効にしてアプリケーションを実行する場合のパフォーマンスに対する影響が大幅に改善されました。 さらに、バイナリー・ロギングを使用することで、ログへの書き込みを頻繁に実行するアプリケーションの実行がより高速になります。

ログおよびトレースのイベントはそれぞれ 1 カ所のみに保管される

ログ・イベント、System.out、および System.err は、ログ・データ・リポジトリーに保管されます。 トレース・イベントは、トレース・データ・リポジトリーに保管されます。 各タイプのイベントを 1 カ所だけに保管することで、重複したデータ保管のためにパフォーマンスが損なわれることがなくなります。

注: ロギングのパフォーマンスが重要な場合は、コンソール・ログを無効にする必要があります。 コンソール・ログに書き込まれる内容はすべて、ログ・データ・リポジトリーに保管されています。
ログ・データ・リポジトリーおよびトレース・データ・リポジトリーに接続するアプリケーション・サーバーを示すイメージ。
必要がなければ、データをフォーマット設定しない

ユーザーに対する可読性のためにデータをフォーマット設定すると、プロセッサー時間が使用されます。 ログおよびトレース・データは、実行時にログ・イベント・データおよびトレース・イベント・データをフォーマット設定せずに、専有バイナリー表現でより高速に保管されます。 これにより、ログおよびトレース機能のパフォーマンスが向上します。 ログおよびトレースのフォーマット設定を、binaryLogコマンドが実行されると、表示されないログまたはトレースのセクションがフォーマットされることはありません。

ログ・データおよびトレース・データはディスク書き込みの前にバッファーに入る

データを大きなブロックでディスクに書き込むほうが、同じデータ量を小さなブロックに分けて書き込むよりも効率的です。 バイナリー・ロギングには、ログおよびトレース・データをディスクに書き込む前にバッファーに入れる機能があります。 デフォルトでは、ログ・データおよびトレース・データは、ディスクに書き込まれる前に、8 KB のバッファーに保管されます。 バッファーは、10 秒以内に満杯になると、ディスクに書き込まれます。 バッファーがその時間内に満杯にならない場合には、ログに最新情報が含まれるようにするために、自動的にディスクに書き込まれます。

ログおよびトレースの管理

バイナリー・ロギングは、構成しやすく、分かりやすいように設計されています。 例えば、管理者は、ログまたはトレース専用のディスク・スペースの量や、ログおよびトレース・レコードの保存期間を簡単に構成したり、 ログおよびトレース内容の管理をサーバーに任せたりすることができます。 別の例として、すべてのログ、トレース、 System.out、および System.err の内容には、使いやすい 1 つのコマンド (binaryLog) を使用して、特定のコンテンツについてアクセスするファイルについて発生する可能性のある混乱を回避します。

ログ・データ・リポジトリーおよびトレース・データ・リポジトリーの読み取り

ログ・データ・リポジトリーおよびトレース・データ・リポジトリーは、 WebSphere Application Server 専有フォーマットで保管され、ノートパッドや VI などのテキスト・ファイル・エディターを使用して読み取ることはできません。 以下を使用して、ログ・データ・リポジトリーおよびトレース・データ・リポジトリーをプレーン・テキスト形式にコピーできます。binaryLogコマンド。

ログからデータをプルし、データ・リポジトリーをテキスト・ログにトレースするログ・ビューアーを示す画像。
binaryLog コマンド

binaryLogは、ユーザーがログ・データ・リポジトリーおよびトレース・データ・リポジトリーを操作するために提供されている使いやすいコマンド・ライン・ツールです。binaryLogログ・データ・リポジトリーおよびトレース・データ・リポジトリー内の重要な内容を簡単に検索できるようにするフィルタリングおよびフォーマット・オプションを提供します。 例えば、ユーザーは、すべてのエラーまたは警告をフィルターに掛けてから、重要なエラー・メッセージから 10 秒以内に同一スレッドで発生したすべてのログおよびトレースの項目をフィルターに掛けることができます。

ログ・レコードおよびトレース・レコードの拡張内容を使用したフィルター

バイナリー・ロギング機能は、開発者がログ・レコード・コンテキスト API (com.ibm.websphere.logging.hpel.LogRecordContext) を使用してログ・レコードおよびトレース・レコードにカスタム拡張機能を追加する機能を提供します。 以下を使用できます。binaryLogログおよびトレース・レコード拡張の内容に基づいてレコードをフィルタリングするコマンド行ツール。

開発リソース

バイナリー・ロギングは、デフォルトのロギング機能よりも、さらに柔軟かつ効率的にログおよびトレースの内容を処理できるように設計されています。 関心があるレコードのみを表示するために、ログおよびトレースの内容を簡単にフィルタリングすることができます。 コマンド行を使用できます (以下の説明を参照してください)。binaryLogまたは、HPEL API を使用して強力なログ処理プログラムを作成することができます。

com.ibm.websphere.logging.hpel API に接続するログ・データ・リポジトリーとトレース・データ・リポジトリーを示す図。
ログ・データおよびトレース・データの読み取り

バイナリー・ログ・リポジトリーおよびトレース・リポジトリーの内容を取り込むツールの開発を開発者が簡単に行えるようにするための API が提供されています。 例えば、開発者は、重要なメッセージ ID の既知のリストと一致するメッセージ ID を持つメッセージを見つけるために、ログおよびトレースの内容を検索する Java™ プログラムを作成できます。 この API は、com.ibm.websphere.logging.hpel パッケージに入っています。 HPEL ログ読み取り API の詳細については、API の資料を参照してください。

ログおよびトレース・レコードの拡張性

開発者は、ログ・レコード・コンテキスト API (com.ibm.websphere.logging.hpel.LogRecordContext) を使用して、ログ・レコードおよびトレース・レコードにカスタム拡張を追加できます。 バイナリー・ロギングがログ・レコードおよびトレース・レコードを保管する場合、同じスレッド上のログ・レコード・コンテキストに存在するすべての拡張機能が含まれます。 例えば、 開発者は、重要な HTTP 要求パラメーターをログ・レコード・コンテキスト に追加するためのサーブレット・フィルターを作成できます。 そのサーブレットの実行中、HPEL API は同じスレッド上で作成されるどのログ・レコードおよびトレース・レコードにもそれらの拡張を追加します。

その他のログおよびトレース・レコードのフィールドと同様に、開発者は、HPEL API を使用してレコードの拡張にアクセスできます。 これは、ログ・リポジトリーおよびトレース・リポジトリーから読み取るツールを作成する場合に役立ちます。 開発者は、ログ・レコード・コンテキスト API を利用して、実行時にカスタム・ログ・ハンドラー、フィルター、およびフォーマッターで拡張にアクセスすることも可能です。