我们已经使用 SMTP 将 log4net 与 Jira 桥接起来。
现在我们担心,由于该站点是公开的,如果我们在生产环境中遇到很多问题,Jira 服务器会发生什么情况。
我们已经过滤了严重和致命,但我们希望看到 log4net 上的一些累加器服务或一个普通过滤器,它可以识别重复问题并阻止它们通过电子邮件发送。最好不必更改错误报告代码,因此最好使用配置解决方案。
我想将日志转储到数据库中,然后创建一个单独的侦听器,一些智能代码将是一个(昂贵的)替代方案。
也许这足以满足您的要求:
它基本上限制了在给定时间跨度内发送的电子邮件数量。我认为根据您的需要定制它应该很容易。我做了类似的事情,甚至在一定的时间范围内丢弃了消息:
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" />
您还可以使用带有log4net.Core.TimeEvaluator的普通 SmtpAppender作为 Evaluator。
假设我们有 5 分钟的间隔,事件发生在 00:00、00:01 和 01:00。
您想要哪一个取决于您是否更担心有保证的延迟或潜在的大延迟。
我尝试将 SmptThrottlingAppender 与 TimeEvaluator 结合起来,但无法获得我想要的行为。我开始怀疑我应该写一个新的 ITriggeringEventEvaluator,而不是一个新的 IAppender。