7

プロジェクトで 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>
4

2 に答える 2

2

を見ると、名前空間の一部のtrivial.hppようです。試しましたか?severitykeywordsboost::log::keywords::severity

于 2013-05-01T19:48:30.583 に答える
0

@aardvarkk ソリューションを要約した C++11 での完全な動作例を次に示します。

#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;
}
于 2015-03-03T08:46:10.577 に答える