什么是用于限制错误日志记录的良好"backoff"算法?

What is a good "backoff" algorithm for throttling logging of errors?

本文关键字:backoff 算法 记录 用于 日志 错误 什么      更新时间:2023-10-16

我提出了一个只在每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("...");
    }
}

看起来很合理。另一种方法是将日志放入内存中的某个位置,然后在计时器上消除重复。例如,每10秒钟,您可以统计每条消息的出现次数并将其全部记录下来。这克服了你的方法中的一个问题,即如果事件发生10次,然后5个小时过去,然后每小时发生一次,再过10个小时就不会出现。不时地"刷新"日志消息的缓冲区是很好的,这样您就不会失去操作意识。