Получить серьезность регистратора boost.log..?

Предположим, у меня есть простой логгер boost.log severity_logger, настроенный следующим образом:

   logging::core::get()->set_filter(logging::trivial::severity >= logging::trivial::debug);
   logging::add_common_attributes();
   src::severity_logger< logging::trivial::severity_level > logger;

Как мне программно проверить серьезность?
Т.е. что-то вроде logger.getSeverity()..?

Я просмотрел документы и другие вопросы здесь, в StackOverflow, но просто не смог найти, что должно быть простым вызовом API..?


person cacau    schedule 29.01.2014    source источник


Ответы (1)


Я бы сказал, что вы не можете. Система ведения журнала состоит из трех уровней (см. Обзор дизайна системы регистрации).

  • Ваш severity_logger является исходным регистратором с атрибутом severity_level на уровне сбора данных.

  • Серьезность, которую вы устанавливаете с помощью logging::core::get()->set_filter(...), является функциональным объектом, который устанавливается для ядра ведения журнала. Все сообщения, переданные в регистратор, будут отфильтрованы этим функциональным объектом, прежде чем будут переданы приемникам.

Так что на самом деле нет такой вещи, как severity это severity_logger. Тяжесть просто передается в ядро, а затем в стоки.


РЕДАКТИРОВАТЬ: Уточняя мой комментарий, вы также можете объявить переменную severityLevel и передать ее функции set_filter (используя ссылочную оболочку boost boost::ref())

// defined somewhere:
logging::trivial::severity_level severityLevel = logging::trivial::info;

// passed to set_filter() by reference
logging::core::get()->set_filter(
    logging::trivial::severity >= boost::ref(severityLevel));

// try out the logging:
BOOST_LOG_SEV(logger, warning) << "A warning severity message"; // not filtered out
severityLevel = logging::trivial::error;
BOOST_LOG_SEV(logger, warning) << "Another warning message"; // filtered out
person mr_georg    schedule 29.01.2014
comment
Хм.. интересно. Поэтому мне пришлось бы хранить все, что передается в boost.log через set_filter() в моем классе-оболочке. - person cacau; 29.01.2014
comment
Это зависит от того, чего вы хотите достичь. Объект функции фильтра также может быть инициализирован вашей собственной функцией, поведение которой может зависеть от некоторой переменной (см. класс boost::logging::filter). - person mr_georg; 29.01.2014