From 4bdc856ede5a6304ae0139d9232259dd1aafd518 Mon Sep 17 00:00:00 2001 From: Andrew Plotner Date: Fri, 19 Apr 2024 23:39:38 -0400 Subject: [PATCH] Suppress printing of duplicate log file lines to prevent log blowup --- src/Core/Misc/PlogLogger.cpp | 44 ++++++++++++++++-------------------- src/Core/Misc/PlogLogger.hpp | 7 ------ 2 files changed, 19 insertions(+), 32 deletions(-) diff --git a/src/Core/Misc/PlogLogger.cpp b/src/Core/Misc/PlogLogger.cpp index 41366543c6..4f2028232d 100644 --- a/src/Core/Misc/PlogLogger.cpp +++ b/src/Core/Misc/PlogLogger.cpp @@ -86,31 +86,25 @@ PlogLogger::PlogLogger() { } void PlogLogger::log(Core::ILogger::Severity logLevel, const std::string_view message) { - PLOG(PlogLogger::convertSeverity(logLevel)) << fmt::format("NORMAL PLOGGER: {}", message); - - std::string log; - Core::ILogger::Severity severity; - this->mutex.lock(); - if (!this->last_msg.empty()) { - if (message == this->last_msg) { - this->count++; - } else { - log = this->last_msg.append(this->count > 0? fmt::format(FMT_STRING(" (x{})"), std::to_string(this->count + 1)) : ""); - severity = Core::ILogger::Severity{this->last_severity}; - - this->last_msg = std::string{message}; - this->last_severity = logLevel; - this->count = 0; - } - } else { - this->last_msg = std::string{message}; - this->last_severity = logLevel; - } - this->mutex.unlock(); - - if (!log.empty()) { - PLOG(PlogLogger::convertSeverity(severity)) << log; - } + static thread_local std::string last_message = ""; + static thread_local Core::ILogger::Severity last_log_level; + static thread_local unsigned num_occurrences = 0; + + if(message == last_message && logLevel == last_log_level){ + num_occurrences += 1; + //Duplicate message; suppress log output + }else{ + //This is a novel message. + + if(num_occurrences > 0){ + PLOG(PlogLogger::convertSeverity(last_log_level)) << last_message << " (Repeated " << num_occurrences << " times)"; + } + last_message = message; + last_log_level = logLevel; + num_occurrences = 0; + + PLOG(PlogLogger::convertSeverity(logLevel)) << message; + } } void PlogLogger::setLogLevel(Core::ILogger::Severity logLevel) { diff --git a/src/Core/Misc/PlogLogger.hpp b/src/Core/Misc/PlogLogger.hpp index a7ccc540a3..aebec31611 100644 --- a/src/Core/Misc/PlogLogger.hpp +++ b/src/Core/Misc/PlogLogger.hpp @@ -4,15 +4,8 @@ #include "Core/Services/ILogger.hpp" #include -#include - class PlogLogger : public Core::ILogger { public: - int count = 0; - Core::ILogger::Severity last_severity; - std::string last_msg; - std::mutex mutex; - PlogLogger(); void setLogLevel(ILogger::Severity logLevel) override; std::string getLogFile() override;