Предотвратить log4net для отправки повторяющихся проблем через SMTP

мы соединили наш log4net с Jira, используя SMTP.

Теперь мы обеспокоены тем, что, поскольку сайт является общедоступным, что может случиться с сервером Jira, если мы получим много проблем в производственной среде.

Мы уже фильтровали Critical и Fatal, но мы хотим увидеть либо какую-либо службу acumulator на log4net, либо простой фильтр, который идентифицирует повторяющиеся проблемы и не позволяет отправлять их по электронной почте. Предпочтительно, не изменяя код сообщения об ошибках, поэтому лучше было бы использовать конфигурационное решение.

Я предполагаю, что сбрасываю журнал в db, а затем создаю отдельный прослушиватель, какой-то смарт-код будет альтернативой (pricy).

Ответ 1

Возможно, этого достаточно для ваших требований:

он в основном ограничивает количество писем, отправленных за определенный промежуток времени. Я думаю, что это очень легко настроить для ваших нужд. Я сделал что-то подобное, которое даже отбрасывает сообщения в течение определенного промежутка времени:

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;
        } 
    }
}

Интервал очистки может быть настроен как обычные настройки других добавок:

<flushInterval value="01:00:00" />

Ответ 2

Вы также можете использовать простой SmtpAppender с log4net.Core.TimeEvaluator в качестве Оценщика.

Предположим, что у нас есть интервал в 5 минут и события в 00:00, 00:01 и 01:00.

  • Stefan Egli SmtpThrottlingAppender отправит электронные письма в 00:00 (события 1) и 01:00 (события 2 и 3).
  • SmtpAppender с TimeEvaluator отправит письма в 00:05 (события 1 и 2) и 01:05 (событие 3).

Какой из них вы хотите, зависит от того, вас больше беспокоит гарантированная задержка или потенциально большая задержка.

Я попытался объединить SmptThrottlingAppender с TimeEvaluator, но не смог получить поведение, которое я хотел. Я начинаю подозревать, что должен писать новый ITriggeringEventEvaluator, а не новый IAppender.