Logging: Skip identical messages logged close in time

There can be situations where multiple identical log messages are computed in a short time interval. Default time interval is set to 1 second, if the message is reported after this interval, the message is added to the log.
This commit is contained in:
Magne Sjaastad 2024-11-13 11:21:28 +01:00
parent 21f6cdbc1e
commit b0344a1e72
2 changed files with 60 additions and 0 deletions

View File

@ -163,6 +163,42 @@ void RiaDefaultConsoleLogger::writeToConsole( const std::string& str )
#endif
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiaLogging::setLastMessage( const QString& message )
{
#pragma omp critical( critical_section_logging )
{
sm_lastMessage = message;
sm_lastMessageTime = std::chrono::high_resolution_clock::now();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiaLogging::isSameMessage( const QString& message )
{
bool isSame = false;
#pragma omp critical( critical_section_logging )
{
if ( message == sm_lastMessage )
{
auto now = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>( now - sm_lastMessageTime );
if ( duration.count() < 1000 )
{
isSame = true;
}
}
}
return isSame;
}
//==================================================================================================
//
//
@ -171,6 +207,8 @@ void RiaDefaultConsoleLogger::writeToConsole( const std::string& str )
std::vector<std::unique_ptr<RiaLogger>> RiaLogging::sm_logger;
std::chrono::time_point<std::chrono::high_resolution_clock> RiaLogging::sm_startTime;
QString RiaLogging::sm_lastMessage;
std::chrono::time_point<std::chrono::high_resolution_clock> RiaLogging::sm_lastMessageTime;
//--------------------------------------------------------------------------------------------------
///
@ -209,6 +247,8 @@ RILogLevel RiaLogging::logLevelBasedOnPreferences()
//--------------------------------------------------------------------------------------------------
void RiaLogging::error( const QString& message )
{
if ( isSameMessage( message ) ) return;
for ( const auto& logger : sm_logger )
{
if ( logger && logger->level() >= int( RILogLevel::RI_LL_ERROR ) )
@ -217,6 +257,8 @@ void RiaLogging::error( const QString& message )
logger->error( message.toLatin1().constData() );
}
}
setLastMessage( message );
}
//--------------------------------------------------------------------------------------------------
@ -224,6 +266,8 @@ void RiaLogging::error( const QString& message )
//--------------------------------------------------------------------------------------------------
void RiaLogging::warning( const QString& message )
{
if ( isSameMessage( message ) ) return;
for ( const auto& logger : sm_logger )
{
if ( logger && logger->level() >= int( RILogLevel::RI_LL_WARNING ) )
@ -232,6 +276,8 @@ void RiaLogging::warning( const QString& message )
logger->warning( message.toLatin1().constData() );
}
}
setLastMessage( message );
}
//--------------------------------------------------------------------------------------------------
@ -239,6 +285,8 @@ void RiaLogging::warning( const QString& message )
//--------------------------------------------------------------------------------------------------
void RiaLogging::info( const QString& message )
{
if ( isSameMessage( message ) ) return;
for ( const auto& logger : sm_logger )
{
if ( logger && logger->level() >= int( RILogLevel::RI_LL_INFO ) )
@ -247,6 +295,8 @@ void RiaLogging::info( const QString& message )
logger->info( message.toLatin1().constData() );
}
}
setLastMessage( message );
}
//--------------------------------------------------------------------------------------------------
@ -254,6 +304,8 @@ void RiaLogging::info( const QString& message )
//--------------------------------------------------------------------------------------------------
void RiaLogging::debug( const QString& message )
{
if ( isSameMessage( message ) ) return;
for ( const auto& logger : sm_logger )
{
if ( logger && logger->level() >= int( RILogLevel::RI_LL_DEBUG ) )
@ -262,6 +314,8 @@ void RiaLogging::debug( const QString& message )
logger->debug( message.toLatin1().constData() );
}
}
setLastMessage( message );
}
//--------------------------------------------------------------------------------------------------

View File

@ -76,9 +76,15 @@ public:
static void resetTimer( const QString& message );
static void logTimeElapsed( const QString& message );
private:
static void setLastMessage( const QString& message );
static bool isSameMessage( const QString& message );
private:
static std::vector<std::unique_ptr<RiaLogger>> sm_logger;
static std::chrono::time_point<std::chrono::high_resolution_clock> sm_startTime;
static QString sm_lastMessage;
static std::chrono::time_point<std::chrono::high_resolution_clock> sm_lastMessageTime;
};
//==================================================================================================