在并行环境中使用boost ::登录

Using boost::log in parallel environment

本文关键字:boost 登录 并行 环境      更新时间:2023-10-16

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

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

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日志没有这种机制,但是您可以使用单独的过程来记录同一文件中的数据并在外部提供对此过程的访问。为了实现这种方法,您可以使用Boost插座或Syslog后端

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