C++ 在并行环境中使用boost::log

C++ 在并行环境中使用boost::log,c++,boost,mpi,boost-log,boost-mpi,C++,Boost,Mpi,Boost Log,Boost Mpi,我用两个进程运行了下面的代码。在输出中,只有一个条目。我每次的排名都不一样。似乎每个进程都会覆盖该文件。如何使所有进程在不覆盖的情况下记录消息 预期结果(顺序可能不同): 0 1 0 // and sometimes 1 #include <boost/log/trivial.hpp> #include <boost/log/utility/setup/file.hpp> #include <boost/mpi.hpp> int main() {

我用两个进程运行了下面的代码。在输出中,只有一个条目。我每次的排名都不一样。似乎每个进程都会覆盖该文件。如何使所有进程在不覆盖的情况下记录消息

预期结果(顺序可能不同):

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;
}
实际结果:

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;
}
代码:

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;
}
#包括
#包括
#包括
int main()
{
boost::mpi::environment env;
boost::mpi::communicator world;
boost::log::添加_文件_日志(“sample.log”);

BOOST\u LOG\u琐碎(信息)Boost log没有这样的机制,但是您可以使用单独的进程将数据记录在同一文件中,并在外部提供对此进程的访问。要实现此方法,您可以使用或除了arturx64建议的方法外,还可以使用在多个工作进程中发布日志记录。这些记录ds可以由一个单独的接收器进程接收,然后它可以将日志记录写入一个文件