Boost.Log не может установить фильтр ведения журнала (необъявленный идентификатор «серьезность»)

Я пытаюсь запустить 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>

person aardvarkk    schedule 01.05.2013    source источник
comment
Эй, трубкозуб, у меня проблемы с фильтрацией серьезности. Мой вопрос здесь: stackoverflow.com/q/29707017/1735836   -  person Patricia    schedule 17.04.2015


Ответы (2)


Глядя на trivial.hpp, кажется, что severity является частью пространства имен keywords. Вы пробовали boost::log::keywords::severity?

person Ryan    schedule 01.05.2013
comment
Да, я тоже это пробовал. К сожалению, я получаю следующее: error C2784: 'std::_Boolarray std::operator >=(const std::valarray<_Ty> &,const std::valarray<_Ty> &)' : could not deduce template argument for 'const std::valarray<_Ty> &' from 'const boost::parameter::keyword<Tag>' - person aardvarkk; 02.05.2013
comment
Похоже, оператор ›= не определен для типа ключевого слова? Я думаю, что ключевое слово уровня серьезности отличается от уровня серьезности, поэтому имеет смысл, что это не работает... - person aardvarkk; 02.05.2013
comment
Угу, это было полностью. По какой-то (глупой?) причине я предположил, что смогу обойтись только включением tribute.hpp. Не уверен, откуда взялась эта логика, но ошибка разрешилась сама собой при включении core.hpp и expressions.hpp. Извините за мою тупость, и большое спасибо за вашу помощь! - person aardvarkk; 02.05.2013
comment
Не проблема, мы все иногда забываем о включениях :). Приятно слышать, что это сработало. - person Ryan; 02.05.2013
comment
@ Райан, у меня проблемы с фильтрацией серьезности. Мой вопрос здесь: stackoverflow.com/q/29707017/1735836 - person Patricia; 17.04.2015

Вот полный рабочий пример на С++ 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;
}
person Adrian Maire    schedule 03.03.2015