Использование boost :: log в параллельной среде

Я запустил следующий код с двумя процессами. На выходе есть только одна запись. Я получаю разные звания каждый раз. Похоже, каждый процесс перезаписывает файл. Как я могу сделать все процессы для записи сообщения без перезаписи?

Ожидаемый результат (порядок может быть другим):

0
1

Фактический результат:

0 // and sometimes 1

Код:

#include <boost/log/trivial.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/mpi.hpp>

int main()
{
boost::mpi::environment env;
boost::mpi::communicator world;

boost::log::add_file_log("sample.log");
BOOST_LOG_TRIVIAL(info) << world.rank();
return 0;
}

2

Решение

В Boost log такого механизма нет, но вы можете использовать отдельный процесс для регистрации данных в одном файле и предоставления доступа к этому процессу извне. Для достижения этого подхода вы можете использовать розетки или же системный журнал

1

Другие решения

В дополнение к тому, что arturx64 предложил, вы также можете использовать приемник очереди между процессами публиковать записи журнала в нескольких рабочих процессах. Эти записи могут быть получены отдельным процессом получателя, который затем может записать записи журнала в файл. Есть пример Вот.

0