2016-10-29 3 views
0

Я в настоящее время создания мойки журнала, который сбрасывает строки журнала с выхода моего Trainer класса cout:Могу ли я скопировать раструб Boost :: Log и изменить его?

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_backend для вывода на std::cout.

Ваш лучший подход - либо использовать функцию, как вы уже сделали, либо кэшировать форматировщик в объекте formatter и установить его для ваших стоков.