将 Boost.Log 与 Boost.Asio 服务一起使用

Posted

技术标签:

【中文标题】将 Boost.Log 与 Boost.Asio 服务一起使用【英文标题】:Using Boost.Log together with Boost.Asio services 【发布时间】:2015-12-28 08:29:34 【问题描述】:

我有一个使用 boost.asio 服务的服务器。我使用 boost.log 通过异步接收器进行日志记录。 asio_io_service 在自己的线程中启动。记录器在启动服务器之前在主线程中初始化。服务器通过 async_accept 接受连接并异步读取和发送消息。

现在我遇到了问题,记录器仅在服务器执行某些操作时记录消息,例如接收消息。当我在记录器初始化之后和启动服务器之前记录一条消息时,我只能在服务器接收到第一条消息之后才能看到这条日志消息。但即使没有发生服务器操作,我也想记录消息。您知道问题是什么以及如何解决吗?

【问题讨论】:

【参考方案1】:

好的,相关的 ***-questions 给了我答案 :) 这是默认禁用的 auto_flush。所以记录器初始化中的这一行就是解决方案:

sink->locked_backend()->auto_flush(true);

【讨论】:

其实如果你使用的是Boost.log异步sinks,auto_flush(true)是没有效果的。

以上是关于将 Boost.Log 与 Boost.Asio 服务一起使用的主要内容,如果未能解决你的问题,请参考以下文章

boost::asio 与 boost::unique_future

将 fork() 与 boost::asio::ip::tcp::iostream 一起使用是不是安全?

如何将 boost.Asio 与 MJPEG 一起使用?

等到发布到 boost::asio::thread_pool 的作业(与所有作业完全相反)完成?

boost asio 学习 定时器

std::bind 是不是应该与 boost::asio 兼容?