2017-02-27 4 views
2

ログスパムを避けるために、数秒ごとにデバッグメッセージをどのように記録できるかを調べようとしています。Javaで数秒ごとにログを記録してログスパムを回避する方法

以下のような機能があります。

public void doSomething() { 
    // log is a logger object from org.slf4j 
    log.debug("doSomething: Enter"); 

    // do some task 

    log.debug("doSomething: Exit"); 
    return; 
} 

この機能は、私は、ログメッセージは100回印刷を取得する必要はありませんループ

for (int i = 0; i < 100; i++) { 
    doSomething(); 
    thread.sleep(100); // sleep for 100 milli seconds 
} 

で100回呼び出されます。私はそれが毎秒印刷されることを望みます。

私はこれを制御できますか?私はdoSomething()に "iteration i"を渡して、特定の繰り返しがあるときだけログを出力すると考えることができます。

何かのように、

public void doSomething(int i) { 
    if (i == 25) { 
     // log is a logger object from org.slf4j 
     log.debug("doSomething: Enter"); 
    } 
    // do some task 

    if (i == 25) { 
     // log is a logger object from org.slf4j 
     log.debug("doSomething: Exit"); 
    } 
    return; 
} 


for (int i = 0; i < 100; i++) { 
    doSomething(i); 
    thread.sleep(100); // sleep for 100 milli seconds 
} 

はこれを行うには良い方法はありますか?ありがとう!

+5

関数に 'i'を渡すのではなく、ループのログを記録するのはどうですか? – nickb

+0

doSomething()を呼び出す他の関数があるかもしれません。だから私は、機能内のログを行うことが良いと思った – SyncMaster

+0

[ログの頻度を制限する方法は?]の可能な複写?()http://stackoverflow.com/questions/10212644/how-to-limit-logging-frequency – jmehrens

答えて

2

私は同じ問題が発生したときに、調整済みロガーを開発しました。最初は通常のロガーのように動作します。しかし、nメッセージを記録した後、しばらく経過するまで、それ以降のメッセージはすべてスキップされます。毎秒後に、さらにいくつかのメッセージをログに記録することができます。

メッセージの抑制を開始するときには、これについてログを記録し、再度ログオンを開始する必要があります。

+0

私は最後のいくつかのメッセージが両端キューにキャッシュされ、エラーまたは警告が記録された場合にコンテキストとしてログに記録されます。 – Messa

関連する問題