【问题标题】:Using boost::log in parallel environment在并行环境中使用 boost::log
【发布时间】:2017-09-26 14:42:17
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ boost mpi boost-log boost-mpi


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2016-05-21
        • 1970-01-01
        • 2014-08-07
        • 2010-10-17
        • 2021-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多