0

プログラム ログの出力を Y 秒以内に最大 X 回に制限するにはどうすればよいですか?

java.util.logging を使用してサーバー側をプログラミングすると、私のコードには次のような多くの情報、警告、およびエラー ステートメントが含まれます。

s_logger.logp(Level.WARNING, myClassName, myMethodName, "msg.code.in.properties.file");

上記の警告メッセージが STDOUT に出力されるのを見たいと思います。これは、特に本番環境の問題を調査するときに、何か問題が発生したことを示すのに役立つためです。一方で、同じストーリーを伝える多数の行を出力します。短期間で、付加価値はありませんが、代わりにパフォーマンスが低下し、スクロール盲目になります。

私が探しているのは、メッセージ コードごとに y 秒間、出力を x メッセージ以下に制限できるメカニズム/API です。たとえば、1 分間に「トランザクション タイムアウト」というタイプのメッセージを 10 個以上生成してログに書き込みたくありません。

API やライブラリ リファレンスを提供していただければ幸いです。

4

4 に答える 4

1

標準のロギング ライブラリ/メカニズムを使用する場合は、標準ロガーの周囲に独自のラッパーを作成して、ログを記録するかどうかの条件をチェックし、条件が満たされた場合にのみ情報をロギング メカニズムに渡すことができます。

または、独自の(単純な、またはそうではない)ロガーを作成できます:)

于 2009-06-12T13:10:24.530 に答える
0

ありがとう。私はすでにそれを考えました。
この問題はサーバー側の開発プロジェクトでは一般的であると私は信じているので、私はすでにそこにある何かを望んでいました。

于 2009-06-16T21:58:02.590 に答える
0

ギリ、このようなものが最初から存在するかどうかはわかりません。Logbackのような適切なロギングの実装では、コードの各部分に対してロガーを定義し、各ロガーのログ レベルを構成できます (たとえば、デフォルトでは WARN 以上のメッセージのみですが、領域を制御するロガーの場合は INFO または FINE ですらあります)。積極的にデバッグし直してください)。

ロギングの実装は通常、複数のログ ファイルを管理して、現在のログを圧縮されたアーカイブ バージョンにロールオーバーし、一定の間隔で、またはログ ファイルが大きくなりすぎるたびに新しいログを開始することもできます。

コードを管理している場合は、ロギング ステートメントを変更して、冗長な警告があまり生成されないようにすることができます。たとえば、多くのトランザクション タイムアウトが発生している場合は、完全にあきらめる前に、トランザクション開始の試行間で連続して長い期間待つことができます。(これには、トランザクションを実装するサーバーの負荷を徐々に減らし、回復する時間を与えるという利点があります。)

zappan がほの​​めかしたもう 1 つのアプローチは、独自のログ フィルターを作成することです。java.util.logging では、独自のフィルターをフィルターにアタッチして、出力する内容を制限できます

より複雑なフィルタリング アプローチは、ログの実装を構成して、すべてのログ メッセージをファイルではなくマルチキャスト アドレスで送信することです。マルチキャストをリッスンし、必要なものを選択的にディスクに書き込むフィルタリング プログラムを作成します (たとえば、分散システムを使用している場合、これはログ集約サーバーで実行できます)。他のフィルターは、最も重要なメッセージを引き出して、システムの状態のグラフィック表示を更新する可能性があります。

于 2009-06-16T22:18:34.607 に答える