boost::log 多进程

Posted

技术标签:

【中文标题】boost::log 多进程【英文标题】:boost::log with multi-process 【发布时间】:2022-01-07 01:05:56 【问题描述】:

我问了一个关于如何在多进程中使用 boost::log 的问题 How to use Boost::log not to rewrite the log file?

这个答案可以解决大部分问题。但是在极少数情况下,当一个进程正在写日志而另一个进程开始写日志时,

13548:Tue Nov 30 17:33:41 2021
12592:Tue Nov 30 17:33:41 2021
13548:Tue Nov 30 17:33:41 2021
12592:Tue Nov 30 17:33:4572:Tue Nov 30 17:33:41 2021
17196:Tue Nov 30 17:33:41 2021
8572:Tue Nov 30 17:33:41 2021
17196:Tue Nov 30 17:33:41 2021
8572:Tue Nov 30 17:33:41 2021

第四行17:33:4(1 2021)后面的部分被另一个进程写入的(8)572:Tue Nov擦除了。

如何防止这种情况发生?

【问题讨论】:

听起来您在上一个问题中使用的宏不是线程安全的。尝试创建自己的记录器并使用它线程安全而不使用此宏。如需更多阅读,您可以查看此链接 (boost.org/doc/libs/1_56_0/libs/log/doc/html/log/tutorial/…) @jonathan, boost::log 应该是线程安全的(宏,写日志部分是线程安全的。)只是启动另一个进程是不安全的。 【参考方案1】:

Boost.Log 不会同步写入同一文件的多个进程。您必须有一个将日志写入文件的进程,而其他进程将其日志记录传递给写入器。有多种方法可以实现这一目标。例如,您可以将日志传递给syslog 服务或编写自己的日志写入器进程。在后一种情况下,您可以使用inter-process queue 在进程之间传递日志消息。

或者,您可以write your own sink backend 在写入共享文件时执行同步。但是,我怀疑性能会低于具有单个日志写入进程的性能。

【讨论】:

以上是关于boost::log 多进程的主要内容,如果未能解决你的问题,请参考以下文章

多进程和多线程有啥区别?

多线程和多进程模式有啥区别

python:多进程,多进程队列,多进程管道,Manager,进程锁,进程池

node怎样模拟多进程?

并发编程之多进程

什么是多线程,多进程?