Предотвратить 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.