バイナリー・ロギング
バイナリー・ロギングは、完全プロファイルの High Performance Extensible Logging (HPEL) テクノロジーを基にした高性能のログおよびトレース機能です。
概要
バイナリー・ロギングは、アプリケーション・サーバーまたはユーザー・アプリケーションが生成するログ、トレース、System.err、および System.out 情報の保管およびアクセス用の便利なメカニズムを提供します。 デフォルトのログおよびトレース機能の代わりとなり、通常は messages.log および trace.log という名前の JVM ログおよび診断トレース・ファイルを提供します。
ログおよびトレースのストレージ
バイナリー・ロギングには、ログ・データ・リポジトリーとトレース・データ・リポジトリーがあります。 以下の図に、アプリケーションおよびアプリケーション・サーバーがどのようにログ情報およびトレース情報を保管するのかを示します。

- ログ・データ・リポジトリー
ログ・データ・リポジトリーは、ログ・レコード用の保管機能です。 通常、ログ・データは、管理者が確認するためのものです。これには、アプリケーションまたはサーバーが 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 での OSGi ロギング・サービス、または Detail より低いレベル (Fine、Finer、Finest、およびレベル Detail より低いすべてのカスタム・レベル) での java.util.logging に書き込むすべての情報が含まれます。
ログおよびトレースのパフォーマンス
バイナリー・ロギングは、デフォルトのログおよびトレース機能よりもずっと優れたものになるよう設計され、テストされています。その成果の 1 つは、 トレースを使用可能にしてアプリケーション・サーバーを実行する際にパフォーマンスに及ぼす影響が、 デフォルトのログおよびトレース・フレームワークを使用して同じコンポーネントをトレースする場合に比べて小さくなったことです。 また、バイナリー・ロギングを使用すると、ログに頻繁に書き込みを行うアプリケーションをより高速に実行できます。
- ログおよびトレースのイベントはそれぞれ 1 カ所のみに保管される
ログ・イベント、System.out、および System.err は、ログ・データ・リポジトリーに保管されます。トレース・イベントは、トレース・データ・リポジトリーに保管されます。 各タイプのイベントを 1 カ所だけに保管することで、重複したデータ保管のためにパフォーマンスが損なわれることがなくなります。
注: ロギングのパフォーマンスが重要なケースでは、コンソール・ログを使用不可にしてください。 コンソール・ログに書き込まれる内容はすべて、ログ・データ・リポジトリーに保管されています。- 必要がなければ、データをフォーマット設定しない
ユーザーに対する可読性のためにデータをフォーマット設定すると、プロセッサー時間が使用されます。ログおよびトレース・データは、実行時にログ・イベント・データおよびトレース・イベント・データをフォーマット設定せずに、専有バイナリー表現でより高速に保管されます。これにより、ログおよびトレース機能のパフォーマンスが向上します。binaryLog コマンドの実行までログおよびトレースのフォーマット設定を見送ることで、ログまたはトレースの中で表示しない部分は、フォーマット設定されません。
- ログ・データおよびトレース・データはディスク書き込みの前にバッファーに入る
大きなブロックのデータをディスクに書き込むと、同量のデータを小さなブロックで書き込む場合より、効率が高まります。バイナリー・ロギングには、ログおよびトレース・データをディスクに書き込む前にバッファーに入れる機能があります。デフォルトでは、ログ・データおよびトレース・データは、ディスクに書き込まれる前に、8 KB のバッファーに保管されます。バッファーは、10 秒以内に満杯になると、ディスクに書き込まれます。バッファーがその時間内に満杯にならない場合には、ログに最新情報が含まれるようにするために、自動的にディスクに書き込まれます。
ログおよびトレースの管理
バイナリー・ロギングは、構成しやすく、分かりやすいように設計されています。例えば、管理者は、ログまたはトレース専用のディスク・スペースの量や、ログおよびトレース・レコードの保存期間を簡単に構成したり、ログおよびトレース内容の管理をサーバーに任せたりすることができます。また、使いやすい 1 つのコマンド (binaryLog) で、ログ、トレース、System.out、および System.err のすべての内容にアクセスすることができるため、特定の内容についてどのファイルにアクセスすればよいのか、迷うことがなくなります。
- ログ・データ・リポジトリーおよびトレース・データ・リポジトリーの読み取り
ログ・データ・リポジトリーおよびトレース・データ・リポジトリーは、WebSphere Application Server の専有フォーマットで保管されており、メモ帳や vi などのテキスト・ファイル・エディターで判読することはできません。binaryLog コマンドを使用して、ログ・データ・リポジトリーおよびトレース・データ・リポジトリーをプレーン・テキスト・フォーマットにコピーできます。
- binaryLog コマンド
binaryLog は、ユーザーがログ・データ・リポジトリーおよびトレース・データ・リポジトリーを処理するために提供されている、使いやすいコマンド行ツールです。binaryLog にはフィルター・オプションとフォーマット・オプションが用意されており、ログ・データ・リポジトリーおよびトレース・データ・リポジトリー内の重要な内容を簡単に検索することができます。例えば、ユーザーは、すべてのエラーまたは警告をフィルターに掛けてから、重要なエラー・メッセージから 10 秒以内に同一スレッドで発生したすべてのログおよびトレースの項目をフィルターに掛けることができます。
- ログ・レコードおよびトレース・レコードの拡張内容を使用したフィルター
バイナリー・ロギング機能では、開発者が、ログ・レコード・コンテキスト API (com.ibm.websphere.logging.hpel.LogRecordContext) を使用してログ・レコードおよびトレース・レコードにカスタム拡張を追加するための機能を備えています。 ログ・レコードおよびトレース・レコード拡張の内容に基づいてレコードをフィルタリングするには、binaryLog コマンド行ツールを使用することができます。
開発リソース
バイナリー・ロギングは、デフォルトのロギング機能よりも、さらに柔軟かつ効率的にログおよびトレースの内容を処理できるように設計されています。関心があるレコードのみを表示するために、ログおよびトレースの内容を簡単にフィルターに掛けることができます。ユーザーがコマンド行を使用する (binaryLog コマンドの説明を参照) ことも、開発者が 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 を利用して、実行時にカスタム・ログ・ハンドラー、フィルター、およびフォーマッターで拡張にアクセスすることも可能です。