diff --git a/opm/common/OpmLog/MessageFormatter.hpp b/opm/common/OpmLog/MessageFormatter.hpp index f38d09195..9db4277ff 100644 --- a/opm/common/OpmLog/MessageFormatter.hpp +++ b/opm/common/OpmLog/MessageFormatter.hpp @@ -52,20 +52,30 @@ namespace Opm : use_prefix_(use_prefix), use_color_coding_(use_color_coding) { + if (use_prefix_) { + prefix_flag_ = Log::DefaultMessageTypes; + } } + SimpleMessageFormatter(const int64_t prefix_flag, const bool use_color_coding) + : prefix_flag_(prefix_flag), + use_color_coding_(use_color_coding) + { + } + + SimpleMessageFormatter(const bool use_color_coding) + : use_color_coding_(use_color_coding) + { + prefix_flag_ = Log::MessageType::Warning + Log::MessageType::Error + + Log::MessageType::Problem + Log::MessageType::Bug; + } /// Returns a copy of the input string with a flag-dependant /// prefix (if use_prefix) and the entire message in a /// flag-dependent color (if use_color_coding). virtual std::string format(const int64_t message_flag, const std::string& message) override { std::string msg = message; - const int64_t prefix_flag = Log::MessageType::Warning + Log::MessageType::Error - + Log::MessageType::Problem + Log::MessageType::Bug; - if (message_flag & prefix_flag) { - msg = Log::prefixMessage(message_flag, msg); - } - if (use_prefix_ && !(message_flag & prefix_flag)) { + if (message_flag & prefix_flag_) { msg = Log::prefixMessage(message_flag, msg); } if (use_color_coding_) { @@ -76,6 +86,7 @@ namespace Opm private: bool use_prefix_ = false; bool use_color_coding_ = false; + int64_t prefix_flag_ = 0; }; diff --git a/tests/test_OpmLog.cpp b/tests/test_OpmLog.cpp index 43f7e6e5e..beb7adba4 100644 --- a/tests/test_OpmLog.cpp +++ b/tests/test_OpmLog.cpp @@ -287,10 +287,10 @@ BOOST_AUTO_TEST_CASE(TestOpmLogWithColors) OpmLog::info("Info"); OpmLog::bug("Bug"); - const std::string expected = Log::colorCodeMessage(Log::MessageType::Warning, "Warning: Warning") + "\n" - + Log::colorCodeMessage(Log::MessageType::Error, "Error: Error") + "\n" + const std::string expected = Log::colorCodeMessage(Log::MessageType::Warning, "Warning") + "\n" + + Log::colorCodeMessage(Log::MessageType::Error, "Error") + "\n" + Log::colorCodeMessage(Log::MessageType::Info, "Info") + "\n" - + Log::colorCodeMessage(Log::MessageType::Bug, "Bug: Bug") + "\n"; + + Log::colorCodeMessage(Log::MessageType::Bug, "Bug") + "\n"; BOOST_CHECK_EQUAL(log_stream.str(), expected); @@ -340,22 +340,22 @@ BOOST_AUTO_TEST_CASE(TestOpmLogWithLimits) OpmLog::warning(tag, "Warning"); OpmLog::warning(tag, "Warning"); - const std::string expected1 = Log::colorCodeMessage(Log::MessageType::Warning, "Warning: Warning") + "\n" - + Log::colorCodeMessage(Log::MessageType::Error, "Error: Error") + "\n" + const std::string expected1 = Log::colorCodeMessage(Log::MessageType::Warning, "Warning") + "\n" + + Log::colorCodeMessage(Log::MessageType::Error, "Error") + "\n" + Log::colorCodeMessage(Log::MessageType::Info, "Info") + "\n" - + Log::colorCodeMessage(Log::MessageType::Bug, "Bug: Bug") + "\n" - + Log::colorCodeMessage(Log::MessageType::Warning, "Warning: Warning") + "\n" - + Log::colorCodeMessage(Log::MessageType::Warning, "Warning: Message limit reached for message tag: " + tag) + "\n"; + + Log::colorCodeMessage(Log::MessageType::Bug, "Bug") + "\n" + + Log::colorCodeMessage(Log::MessageType::Warning, "Warning") + "\n" + + Log::colorCodeMessage(Log::MessageType::Warning, "Message limit reached for message tag: " + tag) + "\n"; BOOST_CHECK_EQUAL(log_stream1.str(), expected1); - const std::string expected2 = Log::colorCodeMessage(Log::MessageType::Warning, "Warning: Warning") + "\n" - + Log::colorCodeMessage(Log::MessageType::Error, "Error: Error") + "\n" + const std::string expected2 = Log::colorCodeMessage(Log::MessageType::Warning, "Warning") + "\n" + + Log::colorCodeMessage(Log::MessageType::Error, "Error") + "\n" + Log::colorCodeMessage(Log::MessageType::Info, "Info") + "\n" - + Log::colorCodeMessage(Log::MessageType::Bug, "Bug: Bug") + "\n" - + Log::colorCodeMessage(Log::MessageType::Warning, "Warning: Warning") + "\n" - + Log::colorCodeMessage(Log::MessageType::Warning, "Warning: Warning") + "\n" - + Log::colorCodeMessage(Log::MessageType::Warning, "Warning: Warning") + "\n"; + + Log::colorCodeMessage(Log::MessageType::Bug, "Bug") + "\n" + + Log::colorCodeMessage(Log::MessageType::Warning, "Warning") + "\n" + + Log::colorCodeMessage(Log::MessageType::Warning, "Warning") + "\n" + + Log::colorCodeMessage(Log::MessageType::Warning, "Warning") + "\n"; BOOST_CHECK_EQUAL(log_stream2.str(), expected2); @@ -372,3 +372,51 @@ BOOST_AUTO_TEST_CASE(TestsetupSimpleLog) OpmLog::setupSimpleDefaultLogging(use_prefix); BOOST_CHECK_EQUAL(true, OpmLog::hasBackend("SimpleDefaultLog")); } + + + +BOOST_AUTO_TEST_CASE(TestFormat) +{ + OpmLog::removeAllBackends(); + std::ostringstream log_stream1; + std::ostringstream log_stream2; + std::ostringstream log_stream3; + { + std::shared_ptr streamLog1 = std::make_shared(log_stream1, Log::DefaultMessageTypes); + std::shared_ptr streamLog2 = std::make_shared(log_stream2, Log::DefaultMessageTypes); + std::shared_ptr streamLog3 = std::make_shared(log_stream3, Log::DefaultMessageTypes); + OpmLog::addBackend("STREAM1" , streamLog1); + OpmLog::addBackend("STREAM2" , streamLog2); + OpmLog::addBackend("STREAM3" , streamLog3); + BOOST_CHECK_EQUAL( true , OpmLog::hasBackend("STREAM1")); + BOOST_CHECK_EQUAL( true , OpmLog::hasBackend("STREAM2")); + BOOST_CHECK_EQUAL( true , OpmLog::hasBackend("STREAM3")); + streamLog1->setMessageFormatter(std::make_shared(false, true)); + streamLog2->setMessageFormatter(std::make_shared(Log::MessageType::Info, true)); + streamLog3->setMessageFormatter(std::make_shared(false)); + } + + OpmLog::warning("Warning"); + OpmLog::error("Error"); + OpmLog::info("Info"); + OpmLog::bug("Bug"); + + const std::string expected1 = Log::colorCodeMessage(Log::MessageType::Warning, "Warning") + "\n" + + Log::colorCodeMessage(Log::MessageType::Error, "Error") + "\n" + + Log::colorCodeMessage(Log::MessageType::Info, "Info") + "\n" + + Log::colorCodeMessage(Log::MessageType::Bug, "Bug") + "\n"; + + const std::string expected2 = Log::colorCodeMessage(Log::MessageType::Warning, "Warning") + "\n" + + Log::colorCodeMessage(Log::MessageType::Error, "Error") + "\n" + + Log::colorCodeMessage(Log::MessageType::Info, "Info: Info") + "\n" + + Log::colorCodeMessage(Log::MessageType::Bug, "Bug") + "\n"; + + const std::string expected3 = Log::prefixMessage(Log::MessageType::Warning, "Warning") + "\n" + + Log::prefixMessage(Log::MessageType::Error, "Error") + "\n" + + "Info" + "\n" + + Log::prefixMessage(Log::MessageType::Bug, "Bug") + "\n"; + + BOOST_CHECK_EQUAL(log_stream1.str(), expected1); + BOOST_CHECK_EQUAL(log_stream2.str(), expected2); + BOOST_CHECK_EQUAL(log_stream3.str(), expected3); +}