2015-09-10 21 views
0

有沒有辦法阻止log4net記錄n次相同的異常? 我想實現的是,如果最後一個異常與實際異常相同,那麼我不想記錄。如何防止log4net中的重複異常?

+1

您的日誌記錄代碼目前在看什麼?一個[MVC](http://stackoverflow.com/help/mcve)總是很棒。 – Tobbe

+0

代碼在哪裏? log4net不*記錄相同的異常n次 - 它是*異常處理代碼*這樣做。如果你不想登錄每種方法,就不要。記錄調用層次結構中的最高點,例如在MVC控制器的操作中,或在WPF應用程序中的命令處理程序。或者更改不同日誌調用的嚴重級別並應用篩選器,最上面的嚴重程度最高,下面​​的最低嚴重程度(詳細,調試) –

+1

看看[這個問題](http://stackoverflow.com/questions/ 1208541/log4net-any-filter-for-logging-only-the-n-message/4308493#4308493) – stuartd

回答

1

如果您準備編寫自定義類以將其插入,那麼將有損參數設置爲true的緩衝appender會執行此操作。下面是在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緩衝區大小,有損於真正和評估,然後你可以決定讓事件通如果this.m_lossyEvaluator.IsTriggeringEvent(loggingEvent)返回true。

所以你可以創建一個自定義的ITriggeringEventEvaluator並讓它存儲通過的最近的異常,然後爲每個連續的異常比較兩個值。如果它們的返回值相同,則返回false,如果不返回true並更改最新的異常值。 然後創建BufferingForwardingAppender並使用您的評估程序對其進行配置。

+0

這個答案純粹是技術性的,但應該注意你的問題。 – samy