2014-10-09 12 views
2

我想出了一個只能觸發每10,20,30 ... 100,200,300 ... 1000,2000,但我想看看是否有更好的方法來做到這一點。什麼是一個好的「退避」算法來限制錯誤的記錄?

unsigned long fails = 0; 

while (true) { 
    if (!checkSomething()) { 
     fails++; 
     unsigned long backoff = exp10(((unsigned long) log10(fails))); 
     if (fails % backoff == 0) 
      logError("..."); 
    } 
} 
+1

我見過的一種技術很好的技術就是記錄「發生N次」,它被理解爲是指特定的時間窗口。 – 2014-10-09 06:40:58

回答

5

似乎合理。另一種方法是將日誌排入內存的某個地方,並在定時器上去重複。例如,每十秒鐘可以計算每條消息的出現次數並將它們全部記錄下來。這就解決了你的方法中的一個問題,即如果事件發生了10次,那麼5個小時過去了,然後它每小時發生一次,它將不會再出現10個小時。不時刷新日誌消息的緩衝區很好,這樣就不會失去操作意識。

相關問題