16

我怎样才能限制发送电子邮件的速率 Logback SMTPAppender,以便它最多每n分钟向我发送一次电子邮件?

我已经根据Logback appender设置了我的日志记录,但我不太明白它是如何配置或子类化来实现的。

有隐藏功能吗?有人开发了一个子类来处理这个吗?

4

7 回答 7

7

根据文档,执行此操作的方法似乎是编写一个 EventEvaluator(参见示例 4.14 和 4.15),它查看每个事件的时间戳,以便仅在自上次事件发生后“足够时间”过去时才接受事件公认。

您可以使用 System.currentTimeMillis 来获取一个可以进行数学运算以计算时差的数字。 http://java.sun.com/javase/6/docs/api/java/lang/System.html#currentTimeMillis%28%29

于 2010-01-03T11:05:37.890 回答
6

作为 Thorbjørn,很容易创建一个EventEvaluator限制 appender 触发消息的速率。

但是,我发现 Logback 支持DuplicateMessageFilter,这可能以一种痛苦的方式解决了我的问题:“DuplicateMessageFilter 值得单独展示。这个过滤器检测到重复的消息,并且超过一定数量的重复,丢弃重复的消息。”

于 2010-01-04T16:45:14.840 回答
2

这个工具会做你想要的,但它根本不是线程安全的: http ://code.google.com/p/throttled-smtp-appender/wiki/Usage

我写了一个线程安全的版本,但还没有开源。

您很难为此找到好的工具的原因是 SMTP 不是真正的端点。使用 loggly、airbrake 或其他许多服务,或者使用 logstash 之类的东西运行您自己的服务器。

于 2013-02-19T20:30:44.793 回答
2

看看新的 Whisper appender。它会进行智能抑制。可在此处通过 Maven 和 github 获得

法定免责声明:我是作者。

于 2014-01-14T17:38:39.580 回答
1

为了解决同样的问题,我编写了自定义评估器。它扩展了 ch.qos.logback.classic.boolex.OnMarkerEvaluator,但您可以使用任何其他评估器作为基础。如果在静默间隔中有许多可接受的消息,评估器将丢弃这些消息。对于我的用例来说没关系,但是如果您需要不同的行为 - 只需在第二个 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 分钟)最多发送一条消息:

<evaluator class="package.LimitingOnMarkerEvaluator">
  <marker>FATAL</marker>
  <interval>1000000</interval>
</evaluator>
于 2013-02-05T12:11:49.413 回答
0

我建议提交一个请求此功能的 jira 项目。如果只要求,它很可能会实施。

于 2010-01-03T14:06:01.103 回答
0

顺便提一句,

Logback v0.9.26 现在允许设置 SMTPAppender 消息缓冲区的大小。直到昨天它会发送缓冲区的当前内容,最多有 256 条消息,恕我直言,我只想显示电子邮件中的最后一条消息,这让我很头疼。因此,根据我对这个问题的解释,现在可以实施仅携带一个特定错误的定期重复的电子邮件警告。

http://logback.qos.ch/manual/appenders.html#cyclicBufferSize

玩得开心。

于 2010-10-21T09:09:14.367 回答