3

コンシューマーからの複数のリクエストを同時に処理する weblogic バッチ アプリケーションがあります。ロギングの目的には log4j を使用します。現在、複数のリクエストに対して 1 つのログ ファイルにログインしています。すべてのリクエストのログが 1 つのファイルにあるため、特定のリクエストの問題をデバッグするのは面倒です。

そのため、リクエストごとに 1 つのログ ファイルを作成する予定です。コンシューマーは、処理を実行する必要があるリクエスト ID を送信します。実際には、リクエスト ID をアプリケーションに送信する複数のコンシューマーが存在する可能性があります。問題は、リクエストに基づいてログ ファイルを分離する方法です。

本番サーバーを毎回起動および停止することはできないため、日時スタンプまたはリクエスト ID でオーバーライドされたファイル アペンダーを使用するポイントは除外されます。これについては、以下の記事で説明されています: http://veerasundar.com/blog/2009/08/how-to-create-a-new-log-file-for-each-time-the-application-runs/

私はまた、これらの代替手段で遊んでみました:

http://cognitivecache.blogspot.com/2008/08/log4j-writing-to-dynamic-log-file-for.html

http://www.mail-archive.com/log4j-user@logging.apache.org/msg05099.html

このアプローチでは望ましい結果が得られますが、複数のリクエストが同時に送信されると正しく機能しません。いくつかの並行性の問題により、ログがあちこちに移動します。

皆さんからの助けを期待しています。前もって感謝します....

4

4 に答える 4

4

同じトピックに関する私の質問は次のとおりです: ロギング アペンダーを動的に作成および破棄する

Log4Jメーリングリストで、これとまったく同じことを議論しているスレッドでこれをフォローアップします: http://www.qos.ch/pipermail/logback-user/2009-August/001220.html

Ceci Gulcu (log4j の発明者) は、それが良い考えだとは思いませんでした...代わりに Logback を使用することを提案しました。

カスタムファイルアペンダーを使用して、とにかくこれを行いました。詳細については、上記の私の議論を参照してください。

于 2010-02-25T03:51:24.660 に答える
4

logback (log4j の後継) に同梱されている SiftingAppender を見てください。実行時の基準でアペンダーの作成を処理するように設計されています。

アプリケーションがセッションごとにログ ファイルを 1 つだけ作成する必要がある場合は、セッション ID に基づいて識別子を作成するだけです。ディスクリミネータの作成には 3 行または 4 行のコードが必要なため、かなり簡単なはずです。助けが必要な場合は、logback-user メーリング リストで叫んでください。

于 2010-03-05T11:56:03.493 に答える