我当前正在创建一个日志接收器,该日志接收器将日志行从我的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
对象中,并将其设置为两个接收器。