【问题标题】:Boost.Log unable to set logging filter (undeclared identifier 'severity')Boost.Log 无法设置日志过滤器(未声明的标识符“严重性”)
【发布时间】:2013-04-25 20:41:50
【问题描述】:

我正在尝试让 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>

【问题讨论】:

  • 嘿,土豚,我无法过滤严重性。我的问题在这里:stackoverflow.com/q/29707017/1735836

标签: c++ boost boost-log


【解决方案1】:

查看trivial.hpp,似乎severitykeywords 命名空间的一部分。你试过boost::log::keywords::severity吗?

【讨论】:

  • 是的,我也试过了。不幸的是,我得到以下信息:error C2784: 'std::_Boolarray std::operator &gt;=(const std::valarray&lt;_Ty&gt; &amp;,const std::valarray&lt;_Ty&gt; &amp;)' : could not deduce template argument for 'const std::valarray&lt;_Ty&gt; &amp;' from 'const boost::parameter::keyword&lt;Tag&gt;'
  • 似乎没有为关键字类型定义 >= 运算符?我认为“严重级别关键字”与“严重级别”不同,所以这不起作用是有道理的......
  • 呃,就是这样。出于某种(愚蠢的?)原因,我认为我可以只包含 trivial.hpp 就可以逃脱。不确定该逻辑来自何处,但在包含core.hppexpressions.hpp 时错误自行解决。对不起我的愚蠢,非常感谢您的帮助!
  • 没问题,我们有时都会忘记包含 :)。很高兴听到它成功了。
  • @Ryan,我无法过滤严重性。我的问题在这里:stackoverflow.com/q/29707017/1735836
【解决方案2】:

这是一个完整的 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    相关资源
    最近更新 更多