Новичок: как использовать библиотеку API журналов Pantheios в качестве замены для #ifdef DEBUG? Как определить SEVLEVEL? - PullRequest
3 голосов
/ 25 ноября 2010

Я хочу регистрировать множество событий в динамическом алгоритме поиска (например, информацию о сходимости к глобальному оптимуму). Эта регистрация должна иметь переключатель, чтобы выключить / включить. Сейчас есть много возможностей для достижения этой цели:

  • реализовать лог-версию и не лог-версию алгоритма -> избыточность
  • использовать макросы -> некрасиво и небезопасно
  • использовать библиотеку журналов c ++ (или: использовать 1% функционального диапазона библиотеки журналов).

Я решил использовать Pantheios , особенно из-за заявленных требований к производительности (не хочу терять большую производительность из-за этой регистрации, которая необходима только при разработке). Я должен признать, что мне не нужно много функциональных возможностей этой библиотеки, но я подумал, что я был бы гораздо более приятным / безопасным способом ее использования. Может быть, была бы более подходящая альтернатива, о которой я не знаю (мне нужны решения времени компиляции только для ведения журнала -> не знаю, существуют ли библиотеки для ведения журнала, предназначенные для этой цели).

После компиляции, установки и окончательной компоновки (без успешной компоновки вручную, но с помощью инструмента построения scons ; с использованием gcc -> явная компоновка) я хотел попробовать небольшой пример.

Давайте сведем это к следующему:

#include "pantheios/pantheios.hpp"
#include "pantheios/frontends/stock.h"
const PAN_CHAR_T PANTHEIOS_FE_PROCESS_IDENTITY[] = "pantheios_test";    // specify process identity

int main()
{
    pantheios::log_ALERT("alert-event");
    pantheios::log_DEBUG("debug-event");
    pantheios::log_INFORMATIONAL("just information");
    return 1;
}

Связывание выполняется со следующими файлами:

LIBS=['pantheios.1.core.gcc44', 'pantheios.1.be.fprintf.gcc44', 'pantheios.1.bec.fprintf.gcc44', 'pantheios.1.fe.all.gcc44', 'pantheios.1.util.gcc44']

Теперь простой вопрос: как включить / выключить выход консоли? Как выбрать уровень серьезности, который предоставляется бэкэнду?

Просмотр документации привел меня к множеству функций, которые имеют уровень серьезности, но эти функции автоматически вызываются один раз для инициализации. Я знаю, что возможны динамические изменения уровней серьезности. Я точно не знаю, где я могу изменить эти настройки. Я думаю, они должны быть в компоненте внешнего интерфейса. Ссылка на "fe_all" - это уже какое-то решение, какой уровень регистрируется, а какой нет?

Это должно быть относительно просто, потому что в моем случае мне нужно только решение во время компиляции о входе / выходе из системы.

Спасибо за вашу помощь.

Sascha

1 Ответ

7 голосов
/ 25 ноября 2010

Связывает ли "fe_all" уже какие-то решения, какой уровень регистрируется, а какой нет?

Краткий ответ: да.

fe.Все включает все уровни серьезности: «все» сообщения регистрируются.

Если вы хотите лучшего контроля, попробуйте fe.simple.По умолчанию он включает все в отладочных сборках и все, кроме DEBUG и INFO в релизе.Вы можете изменить порог в любое время - при отладке или выпуске - вызвав функцию pantheios_fe_simple_setSeverityThresdhold () (или что-то подобное) в заголовке fe.simple (это pantheios / frontends / fe.simple.h, iirc).

Помните, что Pantheios описывается как библиотека API для ведения журнала.Я думаю, что намерение состоит в том, чтобы обеспечить API, контроль инициализации и вывод существующей «богатой» библиотеки журналов.То, что он обеспечивает «стандартные» интерфейсы и фоны, является удобством для пользователей для (i) быстрого освоения и (ii) простых требований (на которые может претендовать ваша программа).

btwЯ думаю, что форумы Pantheios на сайте проекта довольно хорошо поддерживаются, поэтому вы можете размещать вопросы там и здесь.

...