如何限制一个登录SMTPAppender的电子邮件速率,使它最多每n分钟给我发一封电子邮件?
我已经根据Logback附录器设置了我的日志记录,但是我不太清楚它是如何配置或子类来实现的。
有隐藏的特征吗?有人开发了一个子类来处理这个问题吗?
发布于 2010-01-03 11:05:37
根据文档,这样做的方法似乎是编写一个EventEvaluator (参见示例4.14和4.15),它查看每个事件的时间戳,只在上次事件被接受“足够时间”时才接受事件。
你可以用System.currentTimeMillis来得到一个数字,你可以用它来计算时差。http://java.sun.com/javase/6/docs/api/java/lang/System.html#currentTimeMillis%28%29
发布于 2010-01-04 16:45:14
就像Thorbj rn一样,很容易创建一个EventEvaluator来限制一个附录发送消息的速率。
然而,我发现Logback支持DuplicateMessageFilter,这可能以一种痛苦的方式解决了我的问题:“DuplicateMessageFilter需要一个单独的表示。这个过滤器检测重复的消息,超过一定数量的重复,删除重复的消息。”
发布于 2013-02-05 12:11:49
为了解决同样的问题,我编写了自定义评估器。它扩展了ch.qos.logback.classic.boolex.OnMarkerEvaluator,,但您可以使用任何其他评估器作为基础。如果会有许多可接受的消息处于沉默状态,则间隔评估器将丢弃这些消息。对于我的用例,这是可以的,但如果您需要不同的行为-只需添加额外的检查到第二个如果。
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分钟):
<evaluator class="package.LimitingOnMarkerEvaluator">
<marker>FATAL</marker>
<interval>1000000</interval>
</evaluator>https://stackoverflow.com/questions/1993038
复制相似问题