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

时间:2017-04-28 13:01:25

标签: 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()
{
    boost::mpi::environment env;
    boost::mpi::communicator world;

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

2 个答案:

答案 0 :(得分:1)

Boost日志没有这样的机制,但您可以使用单独的进程在同一文件中记录数据,并提供对此进程的访问权限。要实现此方法,您可以使用boost socketssyslog backend

答案 1 :(得分:0)

除了 arturx64 建议的内容之外,您还可以使用interprocess queue sink在多个工作进程中发布日志记录。这些记录可以由单独的接收器进程接收,然后可以将日志记录写入文件。有一个例子here