From 84fe1dfbdfa017c1710db2f5e0ab6385f680722a Mon Sep 17 00:00:00 2001 From: Philipp Paulweber Date: Sun, 7 May 2017 15:38:40 +0200 Subject: [PATCH] Logger * added internal diagnostic to tract produced errors and warnings for now, maybe we add later a generic tracking of all available Log::Level kinds * added new API to fetch 'errors()' and 'warnings()' counter values from the internal diagnostic of a logger --- cpp/Log.cpp | 24 ++++++++++++++++++++++++ cpp/Log.h | 8 ++++++++ 2 files changed, 32 insertions(+) diff --git a/cpp/Log.cpp b/cpp/Log.cpp index 5299d5e8..9db82b73 100644 --- a/cpp/Log.cpp +++ b/cpp/Log.cpp @@ -93,6 +93,8 @@ Logger::Logger( libstdhl::Log::Stream& stream ) : m_stream( stream ) , m_source( Source::defaultSource() ) , m_category( Category::defaultCategory() ) +, m_errors( 0 ) +, m_warnings( 0 ) { } @@ -122,6 +124,11 @@ void Logger::error( const char* format, ... ) va_end( args ); } +u64 Logger::errors( void ) const +{ + return m_errors; +} + void Logger::warning( const std::string& text ) { log( Log::Level::ID::WARNING, m_source, m_category, text ); @@ -135,6 +142,11 @@ void Logger::warning( const char* format, ... ) va_end( args ); } +u64 Logger::warnings( void ) const +{ + return m_warnings; +} + void Logger::info( const std::string& text ) { log( Log::Level::ID::INFORMATIONAL, m_source, m_category, text ); @@ -209,6 +221,18 @@ Category::Ptr Logger::category( void ) const return m_category; } +void Logger::diagnostic( const Log::Data& data ) +{ + if( data.level().id() == Log::Level::ID::ERROR ) + { + m_errors++; + } + else if( data.level().id() == Log::Level::ID::WARNING ) + { + m_warnings++; + } +} + // // Local variables: // mode: c++ diff --git a/cpp/Log.h b/cpp/Log.h index d77a2142..9c05f433 100644 --- a/cpp/Log.h +++ b/cpp/Log.h @@ -81,9 +81,11 @@ namespace libstdhl void error( const std::string& text ); void error( const char* format, ... ); + u64 errors( void ) const; void warning( const std::string& text ); void warning( const char* format, ... ); + u64 warnings( void ) const; void info( const std::string& text ); void info( const char* format, ... ); @@ -109,6 +111,7 @@ namespace libstdhl void log( Args&&... args ) { m_stream.add( std::forward< Args >( args )... ); + diagnostic( m_stream.data().back() ); } template < const Log::Level::ID LEVEL, typename... Args > @@ -116,6 +119,7 @@ namespace libstdhl { m_stream.add( LEVEL, source(), category(), Log::Items( { std::forward< Args >( args )... } ) ); + diagnostic( m_stream.data().back() ); } Log::Stream& stream( void ); @@ -129,9 +133,13 @@ namespace libstdhl Log::Category::Ptr category( void ) const; private: + void diagnostic( const Log::Data& data ); + Log::Stream& m_stream; Log::Source::Ptr m_source; Log::Category::Ptr m_category; + u64 m_errors; + u64 m_warnings; }; }