2

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

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

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;
}
4

2 回答 2

1

Boost log 没有这样的机制,但是您可以使用单独的进程将数据记录在同一个文件中,并在外部提供对该进程的访问。要实现这种方法,您可以使用boost 套接字syslog 后端

于 2017-04-28T13:11:12.407 回答
0

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

于 2017-04-28T13:35:19.510 回答