如何使用boost.log的记录仪

How to use loggers of boost.log?

本文关键字:记录仪 log boost 何使用      更新时间:2023-10-16

尝试基本boost.log示例,但失败

我将boost.log v2集成到我的项目中。该平台是带VS2017的Windows 10。该程序被编译为目标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<...>"

当前,该代码在Compling Step中失败,尚未达到链接阶段。

我尝试过BOOST-1.64,BOOST-1.68和BOOST-1.70,问题仍然相同

有人可以帮我吗?

代码第一部分的错误mesage

D:librariesboostboost_1_70_0boost/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
        ]

谢谢大家,伙计们。我知道如何解决它,但是我还不知道为什么。

修改代码如下:

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是功能对象还是其他对象?