繁体   English   中英

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

[英]Can I copy a Boost::Log sink and change it?

我当前正在创建一个日志接收器,该日志接收器将来自我的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然后向其添加过滤器。

我可以这样做吗?

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

最好的方法是像以前一样使用函数,或者将格式化程序缓存在格式化formatter对象中并将其设置为两个接收器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM