Boost.Log无法设置日志记录过滤器(未声明标识符'严重性')

时间:2013-05-01 19:36:46

标签: c++ boost 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

我正在搜索命名空间,试图找出我应该如何做到这一点,但我找不到任何有用的东西。看来这是一个疯狂的lambda功能。我有一些替代方案(定义一个填充过滤级别的函数?),但我不知道如何实现这一点。有什么想法吗?

我正在使用Boost.Log版本2.0-r862和Boost 1.53.0。

解决方案:Ryan指出我应该检查我的包含,确定我只包括trivial.hpp,但core.hppexpressions.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>

2 个答案:

答案 0 :(得分:2)

查看trivial.hppseveritykeywords命名空间的一部分。你试过boost::log::keywords::severity吗?

答案 1 :(得分:0)

以下是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;
}