我正在创建一个日志接收器,将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
并将过滤器添加到其中。
我可以这样做吗?
答案 0 :(得分:1)
不,那是不可能做到的。无法复制接收器,实际上add_file_log
创建的接收器不使用text_ostream_backend
而是使用text_file_backend
;您无法将text_file_backend
配置为输出到std::cout
。
您最好的方法是使用功能,就像您已经使用的那样,或者将格式化程序缓存在formatter
对象中并将其设置为您的接收器。