13

我们已经使用 SMTP 将 log4net 与 Jira 桥接起来。

现在我们担心,由于该站点是公开的,如果我们在生产环境中遇到很多问题,Jira 服务器会发生什么情况。

我们已经过滤了严重和致命,但我们希望看到 log4net 上的一些累加器服务或一个普通过滤器,它可以识别重复问题并阻止它们通过电子邮件发送。最好不必更改错误报告代码,因此最好使用配置解决方案。

我想将日志转储到数据库中,然后创建一个单独的侦听器,一些智能代码将是一个(昂贵的)替代方案。

4

2 回答 2

17

也许足以满足您的要求:

它基本上限制了在给定时间跨度内发送的电子邮件数量。我认为根据您的需要定制它应该很容易。我做了类似的事情,甚至在一定的时间范围内丢弃了消息:

public class SmtpThrottlingAppender : SmtpAppender
{
    private DateTime lastFlush = DateTime.MinValue;
    private TimeSpan flushInterval = new TimeSpan(0, 5, 0);

    public TimeSpan FlushInterval
    {
        get { return this.flushInterval; }
        set { this.flushInterval = value; }
    }

    protected override void SendBuffer(LoggingEvent[] events)
    {
        if (DateTime.Now - this.lastFlush > this.flushInterval)
        {
            base.SendBuffer(events);
            this.lastFlush = DateTime.Now;
        } 
    }
}

刷新间隔可以像其他 appender 的正常设置一样配置:

<flushInterval value="01:00:00" />
于 2010-03-09T15:35:17.013 回答
4

您还可以使用带有log4net.Core.TimeEvaluator的普通 SmtpAppender作为 Evaluator。

假设我们有 5 分钟的间隔,事件发生在 00:00、00:01 和 01:00。

  • Stefan Egli 的 SmtpThrottlingAppender 将在 00:00(事件 1)和 01:00(事件 2 和 3)发送电子邮件。
  • 带有 TimeEvaluator 的 SmtpAppender 将在 00:05(事件 1 和 2)和 01:05(事件 3)发送电子邮件。

您想要哪一个取决于您是否更担心有保证的延迟或潜在的大延迟。

我尝试将 SmptThrottlingAppender 与 TimeEvaluator 结合起来,但无法获得我想要的行为。我开始怀疑我应该写一个新的 ITriggeringEventEvaluator,而不是一个新的 IAppender。

于 2012-07-10T13:31:55.190 回答