Я запустил следующий код с двумя процессами. На выходе есть только одна запись. Я получаю разные звания каждый раз. Похоже, каждый процесс перезаписывает файл. Как я могу сделать все процессы для записи сообщения без перезаписи?
Ожидаемый результат (порядок может быть другим):
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;
}
В Boost log такого механизма нет, но вы можете использовать отдельный процесс для регистрации данных в одном файле и предоставления доступа к этому процессу извне. Для достижения этого подхода вы можете использовать розетки или же системный журнал
В дополнение к тому, что arturx64 предложил, вы также можете использовать приемник очереди между процессами публиковать записи журнала в нескольких рабочих процессах. Эти записи могут быть получены отдельным процессом получателя, который затем может записать записи журнала в файл. Есть пример Вот.