1

ここに私のコードがあります:

#include <boost/log/trivial.hpp>
#include <boost/move/utility.hpp>
#include <boost/log/sources/logger.hpp>
#include <boost/log/sources/record_ostream.hpp>
#include <boost/log/sources/global_logger_storage.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>

namespace logging = boost::log;
namespace src = boost::log::sources;
namespace keywords = boost::log::keywords;

BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT(my_logger, src::logger_mt)

void Foo::Some()
{
  std::cout << "TEST";

  src::logger_mt& lg = my_logger::get();

  logging::add_file_log("F:\\sample.log");
  //logging::core::get()->set_filter
  //  (
  //  logging::trivial::severity >= logging::trivial::info
  //  );
  logging::add_common_attributes();

  BOOST_LOG(lg) << "Greetings from the global logger!";

これはブースト チュートリアルから取得したものですが、ファイルに書き込まれず、エラー メッセージも表示されません。

チュートリアルはこちら: http://www.boost.org/doc/libs/master/libs/log/example/doc/tutorial_file.cpp

私は何を間違っていますか?

それは行なしで動作します:logging::add_file_log("F:\\sample.log");しかし、私は別のファイルの場所を試していましたが、どこにも書き込みません

4

2 に答える 2

4

問題は、ロガーに重大度属性がないことです。ログ レコードに重大度の値が生成されないため、設定したフィルタは常にレコードを拒否します。

リンクしたドキュメントの例では、ログに使用されていることがわかります(こちらのドキュメントを参照してseverity_loggerください。ロガーには、テンプレート引数で指定されたタイプの重大度属性があり、マクロはすべてのログ レコードの重大度の値を提供します。属性値のタイプ (重大度レベル) は、フィルターおよびフォーマッターがインストールされている場合、それらと一致する必要があることに注意してください。設定したフィルターのキーワードは、重大度レベルが type であると予想されることを意味します。BOOST_LOG_SEVseverity_loggerBOOST_LOG_SEVlogging::trivial::severityboost::log::trivial::severity_level

于 2015-10-03T08:50:39.487 に答える
3

ファイル パスは、エスケープ シーケンスが処理された"F:\sample.log"場合と同等である可能性があります。( N3337 2.14.3 文字リテラル"F:sample.log"によると、これは実装定義です) Windows のファイル名には使用できません。 ということですか?
:
"F:\\sample.log"

于 2015-10-02T12:46:22.850 に答える