如何防止log4net中的重复异常
本文关键字:异常 何防止 log4net | 更新日期: 2023-09-27 18:12:09
是否有办法防止log4net记录相同的异常n次?我想要实现的是,如果最后一个异常与实际异常相同,那么我不想记录。
如果您准备编写一个自定义类来插入缓冲追加器,则将有损参数设置为true的缓冲追加器可以达到目的。下面是在BufferingAppenderSkeleton
if (this.m_cb == null || this.m_bufferSize <= 1)
{
if (!this.m_lossy || (this.m_evaluator != null && this.m_evaluator.IsTriggeringEvent(loggingEvent)) || (this.m_lossyEvaluator != null && this.m_lossyEvaluator.IsTriggeringEvent(loggingEvent)))
{
if (this.m_eventMustBeFixed)
{
loggingEvent.Fix = this.Fix;
}
this.SendBuffer(new LoggingEvent[]
{
loggingEvent
});
}
}
如你所见,如果你将缓冲区大小设置为1,lossy设置为true,并设置了一个求值器,那么如果this.m_lossyEvaluator.IsTriggeringEvent(loggingEvent)
返回true,你就可以决定让事件通过。
所以你可以创建一个自定义的ITriggeringEventEvaluator
,并让它存储最近通过的异常,然后对每个连续的异常比较两个值。如果它们相同则返回false,如果不相同则返回true并更改最新的异常值。然后创建一个BufferingForwardingAppender
并使用您的评估器对其进行配置。