2016-10-29 3 views
0

は、私は現在、coutに私のTrainerクラスの出力からログの行をダンプするログ・シンクを作成しています:Boost :: Log sinkをコピーして変更することはできますか?

using namespace boost;              
    using namespace log;               
    using namespace expressions;             
    using namespace sinks;              

    auto sink = make_shared<synchronous_sink<text_ostream_backend>>();   

    sink->set_formatter(Utility::GetLoggingFormat());       

    sink->locked_backend()->add_stream(           
     shared_ptr<std::ostream>(&std::cout, null_deleter()));     
    sink->set_filter((               
     has_attr(Utility::ClassTag) &&           
     Utility::ClassTag == "App::Trainer"));         
    boost::log::core::get()->add_sink(sink);          

しかし、私はすべてのログ行をダンプしている(他の場所でadd_file_logを呼び出すことによって)シンクをすでに追加していますファイルに。同じGetLoggingFormat()フォーマッタを使用します。実際、私はその機能を持っている唯一の理由は、私がフォーマッタコードを繰り返す必要がないということです。

代わりに、ファイルシンク(add_file_logで別の場所に作成)だけをコピーし、その出力をstd::coutに変更してフィルタを追加することをお勧めします。

私はこれを行うことができますか?

答えて

1

いいえ、できません。シンクはコピーできません。実際にはadd_file_logによって作成されたシンクはtext_ostream_backendではなくtext_file_backendです。 text_file_backendstd::coutに出力するように設定することはできません。

あなたが気に入っている方法は、既に行っているような関数を使うか、formatterオブジェクトにフォーマッタをキャッシュして両方のシンクに設定することです。

関連する問題