Logging Guard для ограничения полупостоянных сообщений журнала - PullRequest
0 голосов
/ 31 октября 2010

Я использую журнал буста в своем приложении для регистрации.

Тем не менее, в некоторых разделах моего кода у меня есть несколько операторов журнала, которые могут появляться очень часто, если что-то идет не так. Мне нужен какой-то охранник, который может ограничивать сообщения журнала, когда он обнаруживает, что одно и то же сообщение журнала появляется постоянно.

например. (Это упрощенный пример, а не фактическая реализация)

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

Если по какой-то причине «framebuffer» не принимает фреймы в течение длительного времени, запись в журнал отправит много журнальных сообщений.

Однако я не уверен, какую стратегию использовать для ограничения сообщений журнала, не теряя важных сообщений, и как ее реализовать.

1 Ответ

1 голос
/ 01 ноября 2010

Как насчет чего-то простого, вы можете заключить его в капсулу, если хотите:

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', если вы получаете абсолютную загрузку с приращениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...