Showing the changes to libraries/shared/src/LogHandler.cpp (1 of 4 files). Show all
Unified · Split
| @@ -17,6 +17,7 @@ · 16 unmodified lines | ||
| 17 | 17 | #define pid_t int // hack to build |
| 18 | 18 | #endif |
| 19 | 19 | |
| 20 | +#include <qdebug.h> | |
| 20 | 21 | #include <qtimer.h> |
| 21 | 22 | |
| 22 | 23 | #include "LogHandler.h" |
| @@ -26,7 +27,9 @@ LogHandler& LogHandler::getInstance() { · 3 unmodified lines | ||
| 26 | 27 | return staticInstance; |
| 27 | 28 | } |
| 28 | 29 | |
| 29 | −LogHandler::LogHandler() { | |
| 30 | +LogHandler::LogHandler() : | |
| 31 | + _shouldOutputPID(false) | |
| 32 | +{ | |
| 30 | 33 | // setup our timer to flush the verbose logs every 5 seconds |
| 31 | 34 | QTimer* logFlushTimer = new QTimer(this); |
| 32 | 35 | connect(logFlushTimer, &QTimer::timeout, this, &LogHandler::flushRepeatedMessages); |
| @@ -51,9 +54,33 @@ const char* stringForLogType(QtMsgType msgType) { · 18 unmodified lines | ||
| 51 | 54 | // the following will produce 2000-10-02 13:55:36 -0700 |
| 52 | 55 | const char DATE_STRING_FORMAT[] = "%Y-%m-%d %H:%M:%S %z"; |
| 53 | 56 | |
| 54 | −void LogHandler::verboseMessageHandler(QtMsgType type, const QMessageLogContext& context, const QString& message) { | |
| 57 | +void LogHandler::flushRepeatedMessages() { | |
| 58 | + QHash<QString, int>::iterator message = _repeatMessageCountHash.begin(); | |
| 59 | + while (message != _repeatMessageCountHash.end()) { | |
| 60 | + message = _repeatMessageCountHash.erase(message); | |
| 61 | + } | |
| 62 | +} | |
| 63 | + | |
| 64 | +QString LogHandler::printMessage(QtMsgType type, const QMessageLogContext& context, const QString& message) { | |
| 65 | + | |
| 55 | 66 | if (message.isEmpty()) { |
| 56 | − return; | |
| 67 | + return QString(); | |
| 68 | + } | |
| 69 | + | |
| 70 | + if (type == QtDebugMsg) { | |
| 71 | + // for debug messages, check if this matches any of our regexes for repeated log messages | |
| 72 | + foreach(const QString& regexString, getInstance()._repeatedMessageRegexes) { | |
| 73 | + QRegExp repeatRegex(regexString); | |
| 74 | + if (repeatRegex.indexIn(message) != -1) { | |
| 75 | + | |
| 76 | + // we have a match - add 1 to the count of repeats for this message and set this as the last repeated message | |
| 77 | + _repeatMessageCountHash[regexString] += 1; | |
| 78 | + _lastRepeatedMessage[regexString] = message; | |
| 79 | + | |
| 80 | + // return out, we're not printing this one | |
| 81 | + return QString(); | |
| 82 | + } | |
| 83 | + } | |
| 57 | 84 | } |
| 58 | 85 | |
| 59 | 86 | // log prefix is in the following format |
| @@ -70,27 +97,26 @@ void LogHandler::verboseMessageHandler(QtMsgType type, const QMessageLogContext& · 10 unmodified lines | ||
| 70 | 97 | |
| 71 | 98 | prefixString.append(QString(" [%1]").arg(dateString)); |
| 72 | 99 | |
| 73 | − prefixString.append(QString(" [%1").arg(getpid())); | |
| 74 | − | |
| 75 | − pid_t parentProcessID = getppid(); | |
| 76 | − if (parentProcessID != 0) { | |
| 77 | − prefixString.append(QString(":%1]").arg(parentProcessID)); | |
| 78 | − } else { | |
| 79 | − prefixString.append("]"); | |
| 100 | + if (_shouldOutputPID) { | |
| 101 | + prefixString.append(QString(" [%1").arg(getpid())); | |
| 102 | + | |
| 103 | + pid_t parentProcessID = getppid(); | |
| 104 | + if (parentProcessID != 0) { | |
| 105 | + prefixString.append(QString(":%1]").arg(parentProcessID)); | |
| 106 | + } else { | |
| 107 | + prefixString.append("]"); | |
| 108 | + } | |
| 80 | 109 | } |
| 81 | 110 | |
| 82 | − if (!getInstance()._targetName.isEmpty()) { | |
| 83 | − prefixString.append(QString(" [%1]").arg(getInstance()._targetName)); | |
| 111 | + if (!_targetName.isEmpty()) { | |
| 112 | + prefixString.append(QString(" [%1]").arg(_targetName)); | |
| 84 | 113 | } |
| 85 | 114 | |
| 86 | − fprintf(stdout, "%s %s\n", prefixString.toLocal8Bit().constData(), message.toLocal8Bit().constData()); | |
| 115 | + QString logMessage = QString("%1 %2").arg(prefixString, message); | |
| 116 | + fprintf(stdout, "%s\n", qPrintable(logMessage)); | |
| 117 | + return logMessage; | |
| 87 | 118 | } |
| 88 | 119 | |
| 89 | −void LogHandler::flushRepeatedMessages() { | |
| 90 | − QHash<QString, int>::iterator message = _repeatMessageCountHash.begin(); | |
| 91 | − while (message != _repeatMessageCountHash.end()) { | |
| 92 | − message = _repeatMessageCountHash.erase(message); | |
| 93 | − } | |
| 120 | +void LogHandler::verboseMessageHandler(QtMsgType type, const QMessageLogContext& context, const QString& message) { | |
| 121 | + getInstance().printMessage(type, context, message); | |
| 94 | 122 | } |
| 95 | − | |
| 96 | − | |