4

あなたが私を助けてくれることを願っています。

トランザクションをログに記録する必要がある Web サービスがあります。多数のヒットがあるため、ログ ステートメントはログ ファイル内でバラバラまたは断片化されて表示されます。

レイヤー全体に StringBuilder インスタンスを渡し、このインスタンスにステートメントを追加することを検討しました。次に、クライアントに応答を返す前に、その内容を最後に 1 回ログに記録します (メイン コントローラーの finally 句)。これは不必要に思えますが、Log4J でこれを行うためのよりクリーンな方法があると確信しています。

誰でもこの問題に光を当てることができますか?

ありがとう

4

5 に答える 5

1

実行時にログを記録するときにエントリのすべての部分を統合するのではなく、後でデータを分析するときにそれらを統合します。

たとえば、大量のデータをログに記録するアプリケーションがあり、高速応答が重要です。私たちは最近、事実上リレーショナル データベースにログを記録する (特注の) システムを実装しました。ただし、そのロギング部分はロギング用に最適化されています。アプリケーションが生成した順序でタプル データをログ ファイルに追加するだけです。この形式に対してクエリを実行できるツールがあり、ログ形式に対するすべてのクエリがデータベース内のすべてのテーブルのテーブル スキャンを実質的に必要とすることに腹を立て始めたら、別の形式で保存されたデータベースの新しいバージョンを生成することも計画しています。

この手法を直接利用できない場合でも、それを検討するだけで、Log4J 内で何かを改善するためのアイデアが得られる場合があります。

于 2009-05-19T10:22:13.737 に答える
1

すべてのログステートメントを順番に取得する必要がありますか?つまり、発生時にログに記録されます。順序を変更すると、トリッキーなバグを追跡する必要があるいくつかのイベントのシーケンスを見逃す可能性があります。

リクエストの発信元のスレッド ID またはユーザー ID でメッセージを開始するなどの識別子をメッセージに追加することはできません。このようにして、grep などを使用してログに対してクエリを実行できます。

grep userId *.log

このステートメントは、そのユーザーのすべてのログ ステートメントを正しい順序で高速に返します。

この手法は、高スループットの取引プラットフォームで使用されます。これは、ログ ファイル内のシステムを通じて取引またはユーザーの要求を追跡する最も簡単な方法です。また、独自のロガーを拡張または作成する必要もありません。

于 2009-05-19T10:54:45.840 に答える