3

Boost v1.54 を使用しています。単純に logging::core のデフォルトのシンク形式を変更したいのですが、その方法が見つかりません。ログ レコードのフォーマットのドキュメントでは、ログ ファイルなどのカスタム シンクのフォーマットを変更する方法のみを示しており、デフォルトのフォーマットではありませんか? Boost Log でデフォルトのフォーマットをグローバルに設定する方法はありますか?

これは彼らがすることです:

void init()
{
    logging::add_file_log
    (
        keywords::file_name = "sample_%N.log",
        keywords::rotation_size = 10 * 1024 * 1024,
        keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0),
        keywords::format = "[%TimeStamp%]: %Message%"
    );

    logging::core::get()->set_filter
    (
        logging::trivial::severity >= logging::trivial::info
    );
}

これは私が望むものです:

void init()
{
    logging::core::get()->set_default_format("[%TimeStamp%]: %Message%");
    logging::core::get()->set_filter
    (
        logging::trivial::severity >= logging::trivial::info
    );
}
4

1 に答える 1

3

得るものは何もないので、なぜそれをしたいのか分かりません。それは不可能ですが、それには理由があります。

boost_1_54_0/boost/log/core/core.hpp の下を見ると、属性以外は何も設定できません。これはそれ自体が優れた機能です。

1 つのシンクに同時に多くの種類のストリームを含めることができます。

  • テキストファイルベース
  • コンソールベース
  • または両方(一度書き込み、出力をテキストファイルとコンソールに出力する場合)

コアの場合、好きなだけストリームを追加できるシンクが 1 つだけの場合があります。ストリームは、要件に応じてさまざまに変えることができます。ただし、形式はシンクに適用されます-すべてのストリーム。

したがって、関係を次のように表示します。

  • 1 つのコア --> 1 つのシンク (フォーマットあり) --> 複数のストリーム

一度公開すると、適用した形式ですべてのストリームに配信されます。

同じリンクからのマイナーな例。

また、複数のストリームを使用するためのサンプル コードもあります。

    shared_ptr< std::ostream > strm(new std::ofstream("test.log"));
    mSink->locked_backend()->add_stream(strm);
    shared_ptr< std::ostream > pStream(&std::clog, logging::empty_deleter());
    mSink->locked_backend()->add_stream(pStream);


    mSink->set_formatter
    (
        expr::format("%1%:[%2%] %3%")
            % expr::attr< boost::posix_time::ptime >("TimeStamp")
            //% expr::attr< boost::thread::id >("ThreadID")
            % expr::smessage
    );
于 2013-09-12T03:59:01.213 に答える