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