如何解决Boost.Log - 如何使用一个前端和两个后端创建接收器
我是 Boost.Log 的新手,我正在尝试配置日志记录系统,以便将日志保存在文件中并能够在代码中访问日志。
我设法让文件后端工作(文件名可以,旋转也可以)但现在我正在尝试添加可以访问源代码中创建的日志的功能(我想在 UI 中显示它们).
我是否为此使用额外的文本流后端?如果是这样,我如何向现有接收器添加另一个后端?
这是我所做的:
logging::add_common_attributes();
logging::core::get()->set_filter(trivial::severity >= trivial::trace);
// add a sink with file backend
auto fsSink = logging::add_file_log(
keywords::file_name = "..\\Logs\\%Y%m%d_Tracing_%H%M%s.log",keywords::rotation_size = 2* 1024 * 1024,keywords::open_mode = std::ios_base::app);
// set format of log entries - example:
// 000001: [2021-04-07 08:03:21.368897] info : Test message
// log entries have fix width for line id and severity so that all message are aligned
fsSink->set_formatter
(
expr::stream <<
std::right << std::setw(5) << std::setfill('0') << expr::attr<unsigned int>("LineID") <<
": [" << expr::format_date_time<boost::posix_time::ptime>("TimeStamp","%Y-%m-%d %H:%M:%s.%f") << "] " <<
std::left << std::setw(7) << std::setfill(' ') << trivial::severity << " : " <<
expr::smessage
);
fsSink->locked_backend()->auto_flush(true);
如果有人能帮助我,那真是太好了。
编辑
好的,现在我设置了第二个带有流后端的接收器,因为我希望它对日志的格式有所不同。
流接收器的初始化:
boost::shared_ptr<sinks::text_ostream_backend> backend =
boost::make_shared<sinks::text_ostream_backend>();
backend->add_stream(boost::shared_ptr<std::ostream>(&std::clog,boost::null_deleter()));
boost::shared_ptr<sink_t> streamSink(new sink_t(backend));
streamSink->set_formatter(expr::stream <<
": [" << expr::format_date_time<boost::posix_time::ptime>("TimeStamp","%Y-%m-%d %H:%M:%s.%f") << "] " <<
expr::smessage);
streamSink->locked_backend()->auto_flush(true);
core->add_sink(streamSink);
现在最大的问题是:如何访问该流以将其重定向到 UI 元素?或者它是默认的控制台(我没有在 UI 应用程序中使用)而无法更改?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。