Запрет log4net для отправки дубликатов вопросов через SMTP - PullRequest
13 голосов
/ 09 марта 2010

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

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

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

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

Ответы [ 2 ]

17 голосов
/ 09 марта 2010

Может быть этого достаточно для ваших требований:

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

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" />
4 голосов
/ 10 июля 2012

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...