From 6d078f41e783007a1c51f16a34a9746e569621d7 Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Mon, 2 Apr 2018 17:32:18 -0700 Subject: [PATCH] Use unique IDs for log strings that should have repeats supressed --- libraries/networking/src/LimitedNodeList.cpp | 15 ++++--- libraries/shared/src/LogHandler.cpp | 41 +++++++++++++++++++- libraries/shared/src/LogHandler.h | 5 +++ 3 files changed, 54 insertions(+), 7 deletions(-) diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index 0803e380f2..d73ea8ca9c 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -345,12 +345,17 @@ bool LimitedNodeList::packetSourceAndHashMatchAndTrackBandwidth(const udt::Packe return true; } else { - static const QString UNKNOWN_REGEX = "Packet of type \\d+ \\([\\sa-zA-Z:]+\\) received from unknown node with UUID"; - static QString repeatedMessage - = LogHandler::getInstance().addRepeatedMessageRegex(UNKNOWN_REGEX); + //static const QString UNKNOWN_REGEX = "Packet of type \\d+ \\([\\sa-zA-Z:]+\\) received from unknown node with UUID"; + //static QString repeatedMessage + // = LogHandler::getInstance().addRepeatedMessageRegex(UNKNOWN_REGEX); + //qCDebug(networking) << "Packet of type" << headerType + // << "received from unknown node with UUID" << uuidStringWithoutCurlyBraces(sourceID); - qCDebug(networking) << "Packet of type" << headerType - << "received from unknown node with UUID" << uuidStringWithoutCurlyBraces(sourceID); + static const int repeatedIDUnknownNode = LogHandler::getInstance().newRepeatedMessageID(); + QString logString; + QDebug debugString(&logString); + debugString << "Packet of type" << headerType << "received from unknown node with UUID" << uuidStringWithoutCurlyBraces(sourceID); + LogHandler::getInstance().printRepeatedMessage(repeatedIDUnknownNode, LogDebug, QMessageLogContext(), logString); } } diff --git a/libraries/shared/src/LogHandler.cpp b/libraries/shared/src/LogHandler.cpp index 49927a325b..6b89307ddf 100644 --- a/libraries/shared/src/LogHandler.cpp +++ b/libraries/shared/src/LogHandler.cpp @@ -25,7 +25,7 @@ #include #include -QMutex LogHandler::_mutex; +QMutex LogHandler::_mutex(QMutex::Recursive); LogHandler& LogHandler::getInstance() { static LogHandler staticInstance; @@ -107,13 +107,25 @@ void LogHandler::flushRepeatedMessages() { message.messageCount = 0; } + + // New repeat-supress scheme: + for (int m = 0; m < (int)_repeatCounts.size(); ++m) { + int repeatCount = _repeatCounts[m]; + if (m > 1) { + QString repeatLogMessage = QString(m) + " repeated log entries - Last entry: \"" + _repeatedMessageStrings[m] + + "\""; + printMessage(LogSuppressed, QMessageLogContext(), repeatLogMessage); + _repeatCounts[m] = 0; + _repeatedMessageStrings[m] = QString(); + } + } } QString LogHandler::printMessage(LogMsgType type, const QMessageLogContext& context, const QString& message) { - QMutexLocker lock(&_mutex); if (message.isEmpty()) { return QString(); } + QMutexLocker lock(&_mutex); if (type == LogDebug) { // for debug messages, check if this matches any of our regexes for repeated log messages @@ -217,3 +229,28 @@ const QString& LogHandler::addOnlyOnceMessageRegex(const QString& regexString) { _onetimeMessages.push_back(onetimeMessage); return regexString; } + +int LogHandler::newRepeatedMessageID() { + QMutexLocker lock(&_mutex); + int newMessageId = _currentMessageID; + ++_currentMessageID; + _repeatCounts.push_back(0); + _repeatedMessageStrings.resize(_currentMessageID); + return newMessageId; +} + +void LogHandler::printRepeatedMessage(int messageID, LogMsgType type, const QMessageLogContext & context, + const QString & message) { + QMutexLocker lock(&_mutex); + if (messageID >= _currentMessageID) { + return; + } + + if (_repeatCounts[messageID] == 0) { + printMessage(type, context, message); + } else { + _repeatedMessageStrings[messageID] = message; + } + + ++_repeatCounts[messageID]; +} diff --git a/libraries/shared/src/LogHandler.h b/libraries/shared/src/LogHandler.h index 2e64f16c1e..7b459538ad 100644 --- a/libraries/shared/src/LogHandler.h +++ b/libraries/shared/src/LogHandler.h @@ -53,6 +53,8 @@ public: const QString& addRepeatedMessageRegex(const QString& regexString); const QString& addOnlyOnceMessageRegex(const QString& regexString); + int newRepeatedMessageID(); + void printRepeatedMessage(int messageID, LogMsgType type, const QMessageLogContext& context, const QString &message); private slots: void setupRepeatedMessageFlusher(); @@ -81,6 +83,9 @@ private: }; std::vector _onetimeMessages; + int _currentMessageID { 0 }; + std::vector _repeatCounts; + std::vector _repeatedMessageStrings; static QMutex _mutex; };