【发布时间】:2013-07-27 03:35:25
【问题描述】:
我在 boost 1.54.0 中使用 Boost.Log 来查看它是否适合我的应用程序。一般来说,我的缓冲没有问题,所以我不想打开 auto_flush 或任何东西......但我注意到在我调用 fork() 之前记录的消息是重复的,我想知道是不是因为它们被缓冲了,当进程映像被复制时,缓冲区被复制了,然后两个进程最终都将它们的缓冲区副本写入日志文件......
所以基本上,我只想在调用fork() 之前对日志进行一次手动刷新,以确保没有消息仍在内存中。换句话说,我正在寻找类似于fflush()、.flush()、<< flush 等的东西,我可以在提升日志中使用它们。
我确实尝试在日志中使用<< flush,但我仍然收到重复的消息,所以我不能 100% 确定它是否正在刷新并且重复是由其他问题引起的,或者它是否以某种方式默默地忽略了<< flush...
编辑:
我环顾四周,发现 boost 日志不是 fork-safe。所以我应该补充一点,我不是试图在父进程和子进程中使用相同的日志。我有两种分叉场景 - 一种是父母立即终止并且孩子继续(这样应该是安全的),另一种是孩子应该打开自己的单独日志文件,所以这也应该是安全的......但我需要弄清楚如何关闭一个日志文件接收器,然后打开一个新的接收器(在不同的文件上)。我想关闭水槽也可能是强制冲洗的一种方式......?
【问题讨论】:
-
也许您可以添加一个您收听的日志频道,然后记录一条消息。在您的频道中收到消息后,您可以删除该频道并准备好 fork。
标签: c++ boost flush boost-log boost-logging