如何限制电子邮件的速率Logback SMTPAppender
,以便每发送一次n分钟最多给我发一封电子邮件?Logback SMTPAppender限制率
我已经根据Logback appender设置了我的日志记录,但我不太清楚它是如何配置或实现它的子类。
是否有隐藏功能?有人开发了一个子类来处理这个问题吗?
如何限制电子邮件的速率Logback SMTPAppender
,以便每发送一次n分钟最多给我发一封电子邮件?Logback 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
我建议申请一个jira项目来请求这个功能。如果只有被问到,它很可能会被实施。
作为Thorbjørn,很容易创建一个EventEvaluator
,它限制了appender触发消息的速率。
但是,我发现Logback支持DuplicateMessageFilter
,这可能以一种痛苦的方式解决了我的问题:“DuplicateMessageFilter值得单独展示,此过滤器检测到重复消息,并且超过一定数量的重复,会丢弃重复的消息。
顺便说一句,
的logback v0.9.26允许立即设置SMTPAppender消息缓冲区的大小。直到昨天,它会发送缓冲区的最新消息,最多256条消息,因为我只想显示电子邮件中的最后一条,这对我来说是个痛苦的脖子。因此,现在可以按照我对这个问题的解释,定期执行定期发送的电子邮件警告,这些警告只带有一个特定的错误。
http://logback.qos.ch/manual/appenders.html#cyclicBufferSize
玩得开心。
要解决我编写自定义评估程序的相同问题。它扩展了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>
该工具会做你想要什么,但它不是在所有的线程安全:http://code.google.com/p/throttled-smtp-appender/wiki/Usage
我已经写了一个线程安全版本,但还没有开源。
您找不到合适工具的原因是SMTP不是真正的终端。使用类似loggly,airbrake或其他许多服务的服务,或者使用类似logstash的方式运行自己的服务器。
看看这个新的Whisper appender。它确实能够抑制智能。通过Maven和github提供here
法定免责声明:我是作者。
速率限制是解决这些令人沮丧的棘手问题之一。如果logback有一个简单的解决方案,我会感到惊讶。 – skaffman 2010-01-02 22:12:32
@skaffman,你能解释一下复杂性吗?我知道这可能会隐藏一些故障,以防出现严重错误后发生轻微错误。 – notnoop 2010-01-02 22:18:24