首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Logback SMTPAppender限制率

Logback SMTPAppender限制率
EN

Stack Overflow用户
提问于 2010-01-02 22:08:08
回答 7查看 5.3K关注 0票数 17

如何限制一个登录SMTPAppender的电子邮件速率,使它最多每n分钟给我发一封电子邮件?

我已经根据Logback附录器设置了我的日志记录,但是我不太清楚它是如何配置或子类来实现的。

有隐藏的特征吗?有人开发了一个子类来处理这个问题吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 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

票数 7
EN

Stack Overflow用户

发布于 2010-01-04 16:45:14

就像Thorbj rn一样,很容易创建一个EventEvaluator来限制一个附录发送消息的速率。

然而,我发现Logback支持DuplicateMessageFilter,这可能以一种痛苦的方式解决了我的问题:“DuplicateMessageFilter需要一个单独的表示。这个过滤器检测重复的消息,超过一定数量的重复,删除重复的消息。”

票数 6
EN

Stack Overflow用户

发布于 2013-02-05 12:11:49

为了解决同样的问题,我编写了自定义评估器。它扩展了ch.qos.logback.classic.boolex.OnMarkerEvaluator,,但您可以使用任何其他评估器作为基础。如果会有许多可接受的消息处于沉默状态,则间隔评估器将丢弃这些消息。对于我的用例,这是可以的,但如果您需要不同的行为-只需添加额外的检查到第二个如果。

代码语言:javascript
复制
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分钟):

代码语言:javascript
复制
<evaluator class="package.LimitingOnMarkerEvaluator">
  <marker>FATAL</marker>
  <interval>1000000</interval>
</evaluator>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1993038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档