记录Guard以限制半常量日志消息

时间:2010-10-31 14:06:42

标签: c++ logging boost

我在我的应用程序中使用boost log进行日志记录。

但是,在我的代码的某些部分中,我有一些日志语句,如果出现问题可能会经常发生。我想要一种可以限制日志消息的保护,当它检测到同一条消息不断出现时。

e.g。 (这是一个简化的例子,而不是实际的实现)

while(!framebuffer.try_pop(frame))
{
    BOOST_LOG(trace) << "Buffer underrun.";
}

如果由于某种原因“framebuffer”长时间没有收到任何帧,则日志记录将发送给很多日志消息。

但是,我不确定使用什么策略限制日志消息,不丢失任何重要消息,以及如何实现它。

1 个答案:

答案 0 :(得分:1)

如果您想要简单的话,可以封装它:

int tooMany = 10;
int count = 0;
while(!framebuffer.try_pop(frame))
{
    if(count < tooMany) {
        BOOST_LOG(trace) << "Buffer underrun.";
    }
    count++;
}
if(count >= tooMany) {
    BOOST_LOG(trace) << "Message repeated: " << count << " times.";
}

如果你得到一个绝对的桶加载量,请注意'count'变量上的整数溢出。