diff --git a/opm/simulators/DeferredLogger.cpp b/opm/simulators/DeferredLogger.cpp index ef3eb806d..1c222598d 100644 --- a/opm/simulators/DeferredLogger.cpp +++ b/opm/simulators/DeferredLogger.cpp @@ -86,6 +86,12 @@ namespace Opm for (const auto& m : messages_) { OpmLog::addTaggedMessage(m.flag, m.tag, m.text); } + messages_.clear(); + } + + void DeferredLogger::clearMessages() + { + messages_.clear(); } } // namespace Opm diff --git a/opm/simulators/DeferredLogger.hpp b/opm/simulators/DeferredLogger.hpp index ef279dce1..ec02889bf 100644 --- a/opm/simulators/DeferredLogger.hpp +++ b/opm/simulators/DeferredLogger.hpp @@ -60,8 +60,13 @@ namespace Opm void debug(const std::string& message); void note(const std::string& message); + /// Log all messages to the OpmLog backends, + /// and clear the message container. void logMessages(); + /// Clear the message container without logging them. + void clearMessages(); + private: std::vector messages_; friend Opm::DeferredLogger gatherDeferredLogger(const Opm::DeferredLogger& local_deferredlogger); diff --git a/opm/simulators/DeferredLoggingErrorHelpers.hpp b/opm/simulators/DeferredLoggingErrorHelpers.hpp index 6ca1a908b..72c420709 100644 --- a/opm/simulators/DeferredLoggingErrorHelpers.hpp +++ b/opm/simulators/DeferredLoggingErrorHelpers.hpp @@ -63,6 +63,10 @@ inline void logAndCheckForExceptionsAndThrow(Opm::DeferredLogger& deferred_logge if (terminal_output) { global_deferredLogger.logMessages(); } + // Now that all messages have been logged, they are automatically + // cleared from the global logger, but we must also clear them + // from the local logger. + deferred_logger.clearMessages(); const auto& cc = Dune::MPIHelper::getCollectiveCommunication(); if (cc.max(exception_thrown) == 1) { throw std::logic_error(message);