Я пытаюсь запустить Boost.Log в своем проекте. Проблема в следующей строке из тривиального примера:
using namespace boost::log;
core::get()->set_filter
(
trivial::severity >= trivial::info
);
В моем коде это означает следующее:
boost::log::core::get()->set_filter(
boost::log::trivial::severity >= boost::log::trivial::info
);
Однако я получаю следующие ошибки:
error C2039: 'severity' : is not a member of 'boost::log::v2s_mt_nt5::trivial'
error C2065: 'severity' : undeclared identifier
Я как бы обыскиваю пространства имен, пытаясь выяснить, как я должен это делать, но на самом деле я не нахожу ничего, что работает. Кажется, для этого требуется какая-то сумасшедшая лямбда-функция. Я в порядке с какой-то альтернативой (определяя функцию, которая заполняет уровень фильтрации?), Но я не уверен, как этого добиться. Есть идеи?
Я использую Boost.Log версии 2.0-r862 и Boost 1.53.0.
РЕШЕНИЕ: Райан указал, что я должен проверить мои включения, и, конечно же, я только включал trivial.hpp
, но core.hpp
а также expressions.hpp
Также необходимы, как включает в себя. В том числе их решил проблему.
// need at least these 3 to get "trivial" to work
#include <boost/log/core.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/trivial.hpp>
Смотря на trivial.hpp
, кажется severity
является частью keywords
Пространство имен. Ты пробовал boost::log::keywords::severity
?
Вот полный рабочий пример в C ++ 11, который суммирует решение @aardvarkk:
#include <boost/log/expressions.hpp>
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
namespace logging = boost::log;
auto init() -> void
{
logging::core::get()->set_filter
(
logging::trivial::severity >= logging::trivial::warning
);
}
auto main(int argn, char *args[]) -> int
{
init();
BOOST_LOG_TRIVIAL(info) << "Testing the log system";
BOOST_LOG_TRIVIAL(error) << "Testing the log error";return 0;
}