我使用两个进程运行以下代码。在输出中,只有一个条目。我每次都得到不同的排名。好像每个进程都会覆盖文件。如何在不覆盖的情况下使所有进程记录消息?
预期结果(订单可能不同):
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)
Boost日志没有这样的机制,但您可以使用单独的进程在同一文件中记录数据,并提供对此进程的访问权限。要实现此方法,您可以使用boost sockets或syslog backend
答案 1 :(得分:0)
除了 arturx64 建议的内容之外,您还可以使用interprocess queue sink在多个工作进程中发布日志记录。这些记录可以由单独的接收器进程接收,然后可以将日志记录写入文件。有一个例子here。