我可以复制Boost :: Log接收器并进行更改吗?

时间:2016-10-29 02:12:38

标签: c++ boost boost-log

我正在创建一个日志接收器,将Trainer类的输出中的日志行转储到cout

    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 个答案:

答案 0 :(得分:1)

不,那是不可能做到的。无法复制接收器,实际上add_file_log创建的接收器不使用text_ostream_backend而是使用text_file_backend;您无法将text_file_backend配置为输出到std::cout

您最好的方法是使用功能,就像您已经使用的那样,或者将格式化程序缓存在formatter对象中并将其设置为您的接收器。