2016-10-29 45 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对象中并将其设置为您的接收器。

相关问题