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