Logback の電子メールのレートを制限して、最大でもn分SMTPAppender
ごとに電子メールが送信されるようにするにはどうすればよいですか?
Logback appenderに従ってロギングをセットアップしましたが、それを実装するためにどのように構成またはサブクラス化するかがよくわかりません。
隠れた機能はありますか?誰かがこれを処理するサブクラスを開発しましたか?
Logback の電子メールのレートを制限して、最大でもn分SMTPAppender
ごとに電子メールが送信されるようにするにはどうすればよいですか?
Logback appenderに従ってロギングをセットアップしましたが、それを実装するためにどのように構成またはサブクラス化するかがよくわかりません。
隠れた機能はありますか?誰かがこれを処理するサブクラスを開発しましたか?
ドキュメントに基づいて、これを行う方法は EventEvaluator (例 4.14 および 4.15 を参照) を作成することであると思われます。これは、各イベントのタイムスタンプを調べて、最後のイベントが発生してから「十分な時間」が経過した場合にのみイベントを受け入れるようにします。受け入れました。
System.currentTimeMillis を使用して、時差を計算するために計算できる数値を取得できます。 http://java.sun.com/javase/6/docs/api/java/lang/System.html#currentTimeMillis%28%29
EventEvaluator
Thorbjørn のように、アペンダーがメッセージを送信する速度を制限するを作成するのは簡単です。
しかし、私は Logback がサポートすることを発見しましDuplicateMessageFilter
た。これはおそらく苦い方法で私の問題を解決します。
このツールはまさにあなたが望むことをしますが、まったくスレッドセーフではありません: http://code.google.com/p/throttled-smtp-appender/wiki/Usage
スレッドセーフ バージョンを作成しましたが、まだオープン ソース化していません。
これに適したツールを見つけるのに苦労する理由は、SMTP が実際のエンドポイントではないためです。loggly、airbrake、その他多数のサービスを使用するか、logstash などを使用して独自のサーバーを実行します。
同じ問題を解決するために、カスタム評価器を作成しました。これは ch.qos.logback.classic.boolex.OnMarkerEvaluator を拡張しますが、他の任意のエバリュエーターをベースとして使用できます。無音間隔エバリュエーターに受け入れ可能なメッセージが多数ある場合、これらは破棄されます。私の使用例では問題ありませんが、別の動作が必要な場合は、2 番目の if に追加のチェックを追加するだけです。
public class LimitingOnMarkerEvaluator extends OnMarkerEvaluator {
private long lastSend = 0, interval = 0;
@Override
public boolean evaluate(ILoggingEvent event) throws EvaluationException {
if (super.evaluate(event)) {
long now = System.currentTimeMillis();
if (now - lastSend > interval) {
lastSend = now;
return true;
}
}
return false;
}
public long getInterval() {
return interval;
}
public void setInterval(long interval) {
this.interval = interval;
}
}
1000 秒 (約 17 分) ごとに最大 1 つのメッセージを送信するように構成します。
<evaluator class="package.LimitingOnMarkerEvaluator">
<marker>FATAL</marker>
<interval>1000000</interval>
</evaluator>
ところで、
Logback v0.9.26では、SMTPAppenderメッセージバッファのサイズを設定できるようになりました。昨日までは、最大256メッセージのバッファの現在の内容を送信していましたが、電子メールの最後の1つだけを表示したかったので、これは首の痛みでした。したがって、この質問の私の解釈に従って、特定のエラーを1つだけ運ぶ定期的に繰り返される電子メール警告を実装することが可能になりました。
http://logback.qos.ch/manual/appenders.html#cyclicBufferSize
楽しむ。
この機能をリクエストする Jira アイテムを提出することをお勧めします。頼めば実装されそうです。