Added Logger::getBackend<T>() method

This commit is contained in:
Joakim Hove 2015-01-09 14:09:37 +01:00
parent e6c6209991
commit 5d3daabaef
3 changed files with 29 additions and 5 deletions

View File

@ -71,6 +71,8 @@ namespace Opm {
bool Logger::enabledMessageType( int64_t messageType) const {
if (isPower2( messageType)) {
if ((messageType & m_enabledTypes) == 0)

View File

@ -32,11 +32,24 @@ class Logger {
public:
Logger();
void addMessage(int64_t messageType , const std::string& message) const;
void addBackend(const std::string& name , std::shared_ptr<LogBackend> backend);
bool hasBackend(const std::string& name);
bool enabledMessageType( int64_t messageType) const;
void addMessageType( int64_t messageType , const std::string& prefix);
void addBackend(const std::string& name , std::shared_ptr<LogBackend> backend);
bool hasBackend(const std::string& name);
template <class BackendType>
std::shared_ptr<BackendType> getBackend(const std::string& name) const {
auto pair = m_backends.find( name );
if (pair == m_backends.end())
throw std::invalid_argument("Invalid backend name: " + name);
else
return std::static_pointer_cast<BackendType>(m_backends.find(name)->second);
}
private:
void updateGlobalMask( int64_t mask );

View File

@ -81,11 +81,20 @@ BOOST_AUTO_TEST_CASE(Test_Logger) {
logger.addMessage( Log::MessageType::Error , "Error");
logger.addMessage( Log::MessageType::Warning , "Warning");
BOOST_CHECK_EQUAL( 1 , counter->numWarnings() );
BOOST_CHECK_EQUAL( 1 , counter->numErrors() );
BOOST_CHECK_EQUAL( 0 , counter->numNotes() );
BOOST_CHECK_EQUAL( 1U , counter->numWarnings() );
BOOST_CHECK_EQUAL( 1U , counter->numErrors() );
BOOST_CHECK_EQUAL( 0U , counter->numNotes() );
BOOST_CHECK_EQUAL( log_stream.str() , "Warning\n");
BOOST_CHECK_THROW( logger.getBackend<LogBackend>("No") , std::invalid_argument );
{
auto counter2 = logger.getBackend<MessageCounter>("COUNTER");
BOOST_CHECK_EQUAL( 1U , counter2->numWarnings() );
BOOST_CHECK_EQUAL( 1U , counter2->numErrors() );
BOOST_CHECK_EQUAL( 0U , counter2->numNotes() );
}
}