Boost.Log 无法设置日志记录筛选器(未声明的标识符"严重性")

Boost.Log unable to set logging filter (undeclared identifier 'severity')

本文关键字:未声明 标识符 严重性 筛选 Log 设置 记录 日志 Boost      更新时间:2023-10-16

我想让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。

解决方案: 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>

查看trivial.hpp,似乎severitykeywords名称空间的一部分。你试过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;
}