我可以复制一个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
并添加过滤器。
我可以这样做吗?
不行。sink不能被复制,事实上add_file_log
创建的sink使用的不是text_ostream_backend
,而是text_file_backend
;
text_file_backend
输出到std::cout
。最好的方法是使用函数,就像你已经做的那样,或者将格式化器缓存在formatter
对象中,并将其设置为两个接收器。
相关文章:
- 如何用数字处理log(0)
- 安装opencv失败-粘贴CMakeError.log的内容
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- 如何组织从提升日志接收器进行线程安全读取?
- boost日志文件无法创建sample.log文件
- Boost::log只在debian中崩溃
- 如何将控制台(stdout)添加为g3log中的接收器
- 如何检查 2 个 c++ 数组在 O(1) 或 O(log n) 时间复杂度中是否相同(所有元素都相同,顺序很重要)?
- 设置自定义收集器时不会提升::log尊重关键字::max_size吗?
- 如何使用boost.thread运行多个接收器,每个线程应该分配给每个接收器?
- 我仍然收到此错误未定义的引用:boost::log::v2_mt_posix::trivial::logger::get
- 增强.log含义和功能
- log in cpp 14 and 17
- constexpr exp, log, pow
- UDP 客户端(接收器)未按预期接收数据报
- Boost Log的琐碎记录器"lazy evaluation"是如何工作的?
- boost::log 设置"Channel"通道记录器中的属性
- V8 控制台.log不打印
- 我可以复制一个Boost::Log接收器并更改它吗?
- 如何在使用Boost.Log时停止所有异步接收器