From bb7b132b78c7d1de1ce0b50ba6cc1962194fbab1 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Mon, 2 Mar 2015 14:18:26 -0800 Subject: [PATCH] Add a way to indicate that a specific message of a certain form should only be printed once. Different messages that match the same form will each be printed once. --- domain-server/src/DomainServer.cpp | 4 ++-- libraries/shared/src/LogHandler.cpp | 16 ++++++++++++++++ libraries/shared/src/LogHandler.h | 6 +++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 9aec456587..68093b9c71 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -944,7 +944,7 @@ void DomainServer::readAvailableDatagrams() { if (requestAssignment.getType() != Assignment::AgentType || noisyMessageTimer.elapsed() > NOISY_MESSAGE_INTERVAL_MSECS) { - static QString repeatedMessage = LogHandler::getInstance().addRepeatedMessageRegex + static QString repeatedMessage = LogHandler::getInstance().addOnlyOnceMessageRegex ("Received a request for assignment type [^ ]+ from [^ ]+"); qDebug() << "Received a request for assignment type" << requestAssignment.getType() << "from" << senderSockAddr; @@ -977,7 +977,7 @@ void DomainServer::readAvailableDatagrams() { } else { if (requestAssignment.getType() != Assignment::AgentType || noisyMessageTimer.elapsed() > NOISY_MESSAGE_INTERVAL_MSECS) { - static QString repeatedMessage = LogHandler::getInstance().addRepeatedMessageRegex + static QString repeatedMessage = LogHandler::getInstance().addOnlyOnceMessageRegex ("Unable to fulfill assignment request of type [^ ]+ from [^ ]+"); qDebug() << "Unable to fulfill assignment request of type" << requestAssignment.getType() << "from" << senderSockAddr; diff --git a/libraries/shared/src/LogHandler.cpp b/libraries/shared/src/LogHandler.cpp index 577bf83449..60cddb5cfe 100644 --- a/libraries/shared/src/LogHandler.cpp +++ b/libraries/shared/src/LogHandler.cpp @@ -101,6 +101,22 @@ QString LogHandler::printMessage(LogMsgType type, const QMessageLogContext& cont } } } + + // see if this message is one we should only print once + foreach(const QString& regexString, getInstance()._onlyOnceMessageRegexes) { + QRegExp onlyOnceRegex(regexString); + if (onlyOnceRegex.indexIn(message) != -1) { + if (!_onlyOnceMessageCountHash.contains(message)) { + // we have a match and haven't yet printed this message. + _onlyOnceMessageCountHash[message] = 1; + // break the foreach so we output the first match + break; + } else { + // We've already printed this message, don't print it again. + return QString(); + } + } + } } // log prefix is in the following format diff --git a/libraries/shared/src/LogHandler.h b/libraries/shared/src/LogHandler.h index f8f06b0033..914cad212d 100644 --- a/libraries/shared/src/LogHandler.h +++ b/libraries/shared/src/LogHandler.h @@ -48,6 +48,7 @@ public: static void verboseMessageHandler(QtMsgType type, const QMessageLogContext& context, const QString &message); const QString& addRepeatedMessageRegex(const QString& regexString) { return *_repeatedMessageRegexes.insert(regexString); } + const QString& addOnlyOnceMessageRegex(const QString& regexString) { return *_onlyOnceMessageRegexes.insert(regexString); } private: LogHandler(); @@ -58,6 +59,9 @@ private: QSet _repeatedMessageRegexes; QHash _repeatMessageCountHash; QHash _lastRepeatedMessage; + + QSet _onlyOnceMessageRegexes; + QHash _onlyOnceMessageCountHash; }; -#endif // hifi_LogHandler_h \ No newline at end of file +#endif // hifi_LogHandler_h