2016-10-29 51 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對象中並將其設置爲您的接收器。

相關問題