Предположим, у меня есть простой 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 ..?
Я бы сказал, что вы не можете. Система каротажа состоит из трех слоев (см. Обзор дизайна системы логирования).
Ваш 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
Других решений пока нет …