Как использовать регистраторы boost.log?

Попробуйте базовый пример boost.log, но не удалось

Я интегрирую Boost.log v2 в свой проект. Платформа Windows 10 с vs2017. Программа скомпилирована для x64.

#include <boost/thread/mutex.hpp>
#include <boost/core/null_deleter.hpp>
#include <boost/log/common.hpp>
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/attributes.hpp>
#include <boost/log/exceptions.hpp>
#include <boost/log/sources/record_ostream.hpp>
#include <boost/log/sinks.hpp>
void test(){
   boost::log::sources::severity_logger<severity_level> slg1;
   slg1.open_record();               // this is ok
   slg1.open_record(normal);          // this line failed at next code
}
template< typename BaseT, typename LevelT = int >
class basic_severity_logger : public BaseT
{
    template< typename ArgsT >
    record open_record_unlocked(ArgsT const& args)
    {
       // !!! error at here !!! 
       // because "normal" is an enum variable that doesn't support "operator[]"
        m_SeverityAttr.set_value(args[keywords::severity | m_DefaultSeverity]);   


        return base_type::open_record_unlocked(args);
    }
};

На самом деле, я не знаю, как basic_severity_logger называется?

// logger with multithread supported
boost::log::sources::severity_logger_mt<severity_level> slg;
slg.open_record();                // failed with "no member named 'open_record' in severity_logger_mt<...>"
slg.open_record(DEBUG);           // failed with "no member named 'open_record' in severity_logger_mt<...>"

В настоящее время код не удалось выполнить на этапе компиляции, еще не достигнув этапа связывания.

Я пробовал boost-1.64, boost-1.68 и boost-1.70, проблема остается той же

Кто-нибудь может мне помочь?

сообщение об ошибке для первой части кода

D:\libraries\boost\boost_1_70_0\boost/log/sources/severity_feature.hpp(252): error C2676: binary “[”:“const ArgsT”does not define this operator or a conversion to a type acceptable to the predefined operator
        with
        [
            ArgsT=severity_level
        ]

person Laine    schedule 14.05.2019    source источник
comment
у вас есть необходимые включает? Предоставьте минимальный воспроизводимый пример и точное сообщение об ошибке.   -  person 463035818_is_not_a_number    schedule 14.05.2019
comment
Я только что отправил сообщение об ошибке   -  person Laine    schedule 14.05.2019
comment
если есть ‹boost/log/log.hpp› или ‹boost/log.hpp›, попробуйте включить его.   -  person darune    schedule 14.05.2019
comment
Я добавил все файлы *.hpp в каталог ‹boost/log/›, пока не работает   -  person Laine    schedule 14.05.2019


Ответы (1)


Спасибо всем, ребята. Я знаю, как решить это сейчас, но я еще не знаю, почему.

изменить код следующим образом:

boost::log::sources::severity_logger<boost::log::trivial::severity_level> slg1;
slg1.open_record();
BOOST_LOG_SEV(slg1, boost::log::trivial::trace) << "A regular message";
slg1.open_record(boost::log::keywords::severity=boost::log::trivial::trace);

boost::log::sources::severity_logger_mt<boost::log::trivial::severity_level> slg;
slg.open_record();
slg.open_record(boost::log::keywords::severity=boost::log::trivial::trace);

Ключ в том, что используется параметрboost::log::keywords::severity

slg1.open_record(boost::log::keywords::severity=boost::log::trivial::trace);

Кто-нибудь скажет мне, как это работает? Является ли boost::log::keywords::severity функциональным объектом или чем-то еще?

person Laine    schedule 14.05.2019
comment
boost::log::keywords::severity — это Boost.Parameter (boost.org /doc/libs/1_70_0/libs/parameter/doc/html/index.html). - person Andrey Semashev; 15.05.2019