微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Boost.Log - 如何使用一个前端和两个后端创建接收器

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?