Некоторые исследования существующих решений для ведения журналов C / C ++ показали, что Pantheios может быть лучшим в моем случае, что является минимальными издержками, если ведение журнала отключено.
Кажется, что все регистраторыподдерживать вид сообщения журнала печати.Тем не менее, в моем случае у меня есть вызов функции, которого следует избегать, если ведение журнала отключено (поскольку это довольно дорого).
В настоящее время я использую очень простую настройку регистрации, такую как
#ifdef DEBUG_L1
cout << "msg 1" << endl // log level 1
#ifdef DEBUG_L2
printBuffer() // log level 2
#endif
#endif
Он служит моим потребностям (на данный момент), так как я плачу нулевые накладные расходы, если регистрация отключена.Однако код быстро выглядит некрасивым и не очень гибким.
Это должно быть реализовано с помощью регистратора C ++.Как сказано, тело функции printBuffer()
довольно дорого.Было бы хорошо, если бы его можно было избежать, если ведение журнала отключено.
Можно ли объявить весь вызов функции только для выполнения, когда он находится выше определенного уровня журнала?Или мне все еще нужен препроцессор в этом случае?
Редактировать:
Спасибо @BobTFish.Я на самом деле думал об использовании типа установки, которую вы описываете.Мне интересно, насколько гибко можно реализовать подобные вещи.Обычно я регистрирую набор строк и значений (int
, float
и указатели).В стиле
cout << "name1=" << int << " name2=" << (void*)(ptr) << endl;
Теперь я действительно не люблю переключаться на printf
подобный синтаксис на данном этапе.Как с этим справится макроподход (поскольку он шаблонируется только одним параметром класса)?