Есть ли «встроенный способ» для регистрации всего с glog вплоть до сбоя программы? - PullRequest
5 голосов
/ 04 июля 2011

Я заинтересован в том, чтобы использовать некоторые журналы, чтобы помочь мне обнаружить потенциальные проблемы в моем коде и определить, где произошла ошибка моей программы.Моя проблема в том, что используемая мной библиотека (google glog) не регистрирует вещи, если они происходят непосредственно перед сбоем программы.Поэтому я попытался сделать что-то вроде этого (это шаблон для 3 аргументов):

mutex logMtx;
template<class T, class U, class V>
void mutexLOG_INFO(T t, U u, V v)
{
    stringstream ss;
    ss<<t;
    ss<<u;
    ss<<v;
    LOG(INFO)<<ss.str();
    mutex::scoped_lock sl(logMtx);
    google::FlushLogFiles(0);
}

Это работает AFAIK (из моего тестирования), но, как вы можете видеть, это не очень хорошо, потому что мне нужносделать свою собственную функцию для каждого уровня (INFO, WARNING ..) и для каждого количества параметров.Также я ненавижу заново изобретать колесо.

Так есть ли способ сказать, что glog сбрасывается каждый раз после LOG?

PS Я знаю, что это g-log, а не g-db (упс, имя взято :) но я предпочитаю иметь возможность красиво печатать свои данные STL, я использую gdb только для определения того, где что-то умерло.

РЕДАКТИРОВАТЬ: SO еще раз доказывает, что это отличный источник информации:

#include <glog/logging.h>
#include <**gflags**/gflags.h>
...
FLAGS_logbuflevel=-1;

1 Ответ

3 голосов
/ 04 июля 2011

Я использую gflags с glog, и если вы запустите --help, то параметр logbuflevel может быть тем, что вы ищете.

    -logbuflevel (Buffer log messages logged at this level or lower (-1 means
  don't buffer; 0 means buffer INFO only; ...)) type: int32 default: 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...