2

プロジェクトで Boost.Log 1.55.0 を使用していますが、インスタンスのすべてのシンクの重大度フィルターを変更したいと考えていboost::log::sources::severity_loggerます。

初期重大度フィルターを使用して 1 つのシンクをセットアップする方法の例を次に示します。

void InitializeLogging(LogLevels const kLogLevel) const {
    auto line_id = boost::log::expressions::attr<unsigned int>("LineID");
    auto severity = boost::log::expressions::attr<LogLevels>("Severity");
    auto timestamp = boost::log::expressions::format_date_time<boost::posix_time::ptime>(
        "TimeStamp",
        "%Y-%m-%d %H:%M:%S");

    boost::log::formatter const kFormatter{
        boost::log::expressions::stream
        << std::setw(6) << std::setfill('0') << line_id
        << std::setfill(' ')
        << ": " << timestamp
        << " [" << severity << "] "
        << boost::log::expressions::smessage};

    using TextSink = boost::log::sinks::synchronous_sink<boost::log::sinks::text_ostream_backend>;
    boost::shared_ptr<TextSink> sink = boost::make_shared<TextSink>();
    boost::shared_ptr<std::ostream> stream(&std::clog, boost::empty_deleter());
    sink->locked_backend()->add_stream(stream);
    sink->set_filter(severity >= kLogLevel);
    sink->set_formatter(kFormatter);

    boost::log::core::get()->add_sink(sink);
    boost::log::add_common_attributes();
}

そのため、メンバー関数を介してシンクを作成するときにフィルタリングを設定できますが、Boost.Log のコア用に構成された 1 つ/複数/すべてのシンクのフィルターを変更するset_filter方法を知りたいです。

  1. 既存のシンクを変更する、まだ見ていない機能はありますか?
  2. そうでない場合、コアからシンクを削除して「再作成」する必要がありますか?
4

2 に答える 2

1

私は自分で解決策を見つけました。したがって、ここで私の2つの質問に答えます。

  1. そのような機能は存在しないか、見つけられません。
  2. set_filterいいえ、 Boost.Log のコアで関数を呼び出すことにより、すべてのシンクにフィルターを設定することができます。カスタム重大度ログ レベルに次の関数を使用しています。

    void log_level(LogLevels const kLogLevel) {
      boost::log::core::get()->set_filter(boost::log::expressions::attr<CustomLogLevels>("Severity") >= kLogLevel);
    }
    

Sidenote : を呼び出すことでコアからすべてのシンクを削除できますがboost::log::core::get()->remove_all_sinks()、私のユースケースでは必要ありません。

于 2014-08-12T09:08:18.777 に答える