From 424793b90515a759cd9fd9b5223bd194867e1db4 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 28 Oct 2014 14:49:14 -0700 Subject: [PATCH] complete output of suppressed repeated messages to log --- interface/src/Application.cpp | 2 +- libraries/networking/src/LimitedNodeList.cpp | 2 +- libraries/shared/src/LogHandler.cpp | 17 +++++++++++++---- libraries/shared/src/LogHandler.h | 10 +++++++++- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 16d8062303..141ba20416 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -116,7 +116,7 @@ const QString SKIP_FILENAME = QStandardPaths::writableLocation(QStandardPaths::D const QString DEFAULT_SCRIPTS_JS_URL = "http://public.highfidelity.io/scripts/defaultScripts.js"; void messageHandler(QtMsgType type, const QMessageLogContext& context, const QString& message) { - QString logMessage = LogHandler::getInstance().printMessage(type, context, message); + QString logMessage = LogHandler::getInstance().printMessage((LogMsgType) type, context, message); if (!logMessage.isEmpty()) { Application::getInstance()->getLogger()->addMessage(qPrintable(logMessage)); diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index 600427a733..5c4dc6cea2 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -216,7 +216,7 @@ bool LimitedNodeList::packetVersionAndHashMatch(const QByteArray& packet) { = LogHandler::getInstance().addRepeatedMessageRegex("Packet of type \\d+ received from unknown node with UUID"); qDebug() << "Packet of type" << checkType << "received from unknown node with UUID" - << uuidStringWithoutCurlyBraces(uuidFromPacketHeader(packet)); + << qPrintable(uuidStringWithoutCurlyBraces(uuidFromPacketHeader(packet))); } } else { return true; diff --git a/libraries/shared/src/LogHandler.cpp b/libraries/shared/src/LogHandler.cpp index 078cdf5ab6..aa377b5683 100644 --- a/libraries/shared/src/LogHandler.cpp +++ b/libraries/shared/src/LogHandler.cpp @@ -36,7 +36,7 @@ LogHandler::LogHandler() : logFlushTimer->start(VERBOSE_LOG_INTERVAL_SECONDS * 1000); } -const char* stringForLogType(QtMsgType msgType) { +const char* stringForLogType(LogMsgType msgType) { switch (msgType) { case QtDebugMsg: return "DEBUG"; @@ -46,6 +46,8 @@ const char* stringForLogType(QtMsgType msgType) { return "FATAL"; case QtWarningMsg: return "WARNING"; + case LogSuppressed: + return "SUPPRESS"; default: return "UNKNOWN"; } @@ -57,17 +59,24 @@ const char DATE_STRING_FORMAT[] = "%Y-%m-%d %H:%M:%S %z"; void LogHandler::flushRepeatedMessages() { QHash::iterator message = _repeatMessageCountHash.begin(); while (message != _repeatMessageCountHash.end()) { + QString repeatMessage = QString("%1 repeated log entries matching \"%2\" - Last entry: \"%3\"") + .arg(message.value()).arg(message.key()).arg(_lastRepeatedMessage.value(message.key())); + + QMessageLogContext emptyContext; + printMessage(LogSuppressed, emptyContext, repeatMessage); + + _lastRepeatedMessage.remove(message.key()); message = _repeatMessageCountHash.erase(message); } } -QString LogHandler::printMessage(QtMsgType type, const QMessageLogContext& context, const QString& message) { +QString LogHandler::printMessage(LogMsgType type, const QMessageLogContext& context, const QString& message) { if (message.isEmpty()) { return QString(); } - if (type == QtDebugMsg) { + if (type == LogDebug) { // for debug messages, check if this matches any of our regexes for repeated log messages foreach(const QString& regexString, getInstance()._repeatedMessageRegexes) { QRegExp repeatRegex(regexString); @@ -118,5 +127,5 @@ QString LogHandler::printMessage(QtMsgType type, const QMessageLogContext& conte } void LogHandler::verboseMessageHandler(QtMsgType type, const QMessageLogContext& context, const QString& message) { - getInstance().printMessage(type, context, message); + getInstance().printMessage((LogMsgType) type, context, message); } diff --git a/libraries/shared/src/LogHandler.h b/libraries/shared/src/LogHandler.h index abc39b7040..f8f06b0033 100644 --- a/libraries/shared/src/LogHandler.h +++ b/libraries/shared/src/LogHandler.h @@ -21,6 +21,14 @@ const int VERBOSE_LOG_INTERVAL_SECONDS = 5; +enum LogMsgType { + LogDebug, + LogWarning, + LogCritical, + LogFatal, + LogSuppressed +}; + /// Handles custom message handling and sending of stats/logs to Logstash instance class LogHandler : public QObject { Q_OBJECT @@ -33,7 +41,7 @@ public: void setShouldOutputPID(bool shouldOutputPID) { _shouldOutputPID = shouldOutputPID; } - QString printMessage(QtMsgType type, const QMessageLogContext& context, const QString &message); + QString printMessage(LogMsgType type, const QMessageLogContext& context, const QString &message); /// a qtMessageHandler that can be hooked up to a target that links to Qt /// prints various process, message type, and time information