如何防止log4net中的重复异常

本文关键字:异常 何防止 log4net | 更新日期: 2023-09-27 18:12:09

是否有办法防止log4net记录相同的异常n次?我想要实现的是,如果最后一个异常与实际异常相同,那么我不想记录。

如何防止log4net中的重复异常

如果您准备编写一个自定义类来插入缓冲追加器,则将有损参数设置为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并使用您的评估器对其进行配置。