LogHandler regexps - use vector of values

This commit is contained in:
Simon Walton 2018-03-09 15:44:56 -08:00
parent d4cf22fbaf
commit cc166dbece
2 changed files with 22 additions and 23 deletions

View file

@ -93,11 +93,11 @@ void LogHandler::flushRepeatedMessages() {
QMutexLocker lock(&_mutex); QMutexLocker lock(&_mutex);
for(auto& message: _repeatedMessages) { for(auto& message: _repeatedMessages) {
if (message->messageCount > 1) { if (message.messageCount > 1) {
QString repeatMessage = QString("%1 repeated log entries matching \"%2\" - Last entry: \"%3\"") QString repeatMessage = QString("%1 repeated log entries matching \"%2\" - Last entry: \"%3\"")
.arg(message->messageCount - 1) .arg(message.messageCount - 1)
.arg(message->regexp.pattern()) .arg(message.regexp.pattern())
.arg(message->lastMessage); .arg(message.lastMessage);
QMessageLogContext emptyContext; QMessageLogContext emptyContext;
lock.unlock(); lock.unlock();
@ -105,7 +105,7 @@ void LogHandler::flushRepeatedMessages() {
lock.relock(); lock.relock();
} }
message->messageCount = 0; message.messageCount = 0;
} }
} }
@ -117,13 +117,13 @@ QString LogHandler::printMessage(LogMsgType type, const QMessageLogContext& cont
if (type == LogDebug) { if (type == LogDebug) {
// for debug messages, check if this matches any of our regexes for repeated log messages // for debug messages, check if this matches any of our regexes for repeated log messages
for(auto& repeatRegex : _repeatedMessages) { for (auto& repeatRegex : _repeatedMessages) {
if (repeatRegex->regexp.indexIn(message) != -1) { if (repeatRegex.regexp.indexIn(message) != -1) {
// If we've printed the first one then return out. // If we've printed the first one then return out.
if (repeatRegex->messageCount++ == 0) { if (repeatRegex.messageCount++ == 0) {
break; break;
} }
repeatRegex->lastMessage = message; repeatRegex.lastMessage = message;
return QString(); return QString();
} }
} }
@ -131,13 +131,12 @@ QString LogHandler::printMessage(LogMsgType type, const QMessageLogContext& cont
if (type == LogDebug) { if (type == LogDebug) {
// see if this message is one we should only print once // see if this message is one we should only print once
for(auto& onceOnly : _onetimeMessages) { for (auto& onceOnly : _onetimeMessages) {
if (onceOnly->regexp.indexIn(message) != -1) { if (onceOnly.regexp.indexIn(message) != -1) {
if (onceOnly->messageCount++ == 0) { if (onceOnly.messageCount++ == 0) {
// we have a match and haven't yet printed this message. // we have a match and haven't yet printed this message.
break; break;
} } else {
else {
// We've already printed this message, don't print it again. // We've already printed this message, don't print it again.
return QString(); return QString();
} }
@ -205,16 +204,16 @@ const QString& LogHandler::addRepeatedMessageRegex(const QString& regexString) {
QMetaObject::invokeMethod(this, "setupRepeatedMessageFlusher"); QMetaObject::invokeMethod(this, "setupRepeatedMessageFlusher");
QMutexLocker lock(&_mutex); QMutexLocker lock(&_mutex);
std::unique_ptr<RepeatedMessage> repeatRecord(new RepeatedMessage()); RepeatedMessage repeatRecord;
repeatRecord->regexp = QRegExp(regexString); repeatRecord.regexp = QRegExp(regexString);
_repeatedMessages.insert(std::move(repeatRecord)); _repeatedMessages.push_back(repeatRecord);
return regexString; return regexString;
} }
const QString& LogHandler::addOnlyOnceMessageRegex(const QString& regexString) { const QString& LogHandler::addOnlyOnceMessageRegex(const QString& regexString) {
QMutexLocker lock(&_mutex); QMutexLocker lock(&_mutex);
std::unique_ptr<OnceOnlyMessage> onetimeMessage(new OnceOnlyMessage()); OnceOnlyMessage onetimeMessage;
onetimeMessage->regexp = QRegExp(regexString); onetimeMessage.regexp = QRegExp(regexString);
_onetimeMessages.insert(std::move(onetimeMessage)); _onetimeMessages.push_back(onetimeMessage);
return regexString; return regexString;
} }

View file

@ -17,7 +17,7 @@
#include <QString> #include <QString>
#include <QRegExp> #include <QRegExp>
#include <QMutex> #include <QMutex>
#include <set> #include <vector>
#include <memory> #include <memory>
const int VERBOSE_LOG_INTERVAL_SECONDS = 5; const int VERBOSE_LOG_INTERVAL_SECONDS = 5;
@ -73,13 +73,13 @@ private:
int messageCount { 0 }; int messageCount { 0 };
QString lastMessage; QString lastMessage;
}; };
std::set<std::unique_ptr<RepeatedMessage>> _repeatedMessages; std::vector<RepeatedMessage> _repeatedMessages;
struct OnceOnlyMessage { struct OnceOnlyMessage {
QRegExp regexp; QRegExp regexp;
int messageCount { 0 }; int messageCount { 0 };
}; };
std::set<std::unique_ptr<OnceOnlyMessage>> _onetimeMessages; std::vector<OnceOnlyMessage> _onetimeMessages;
static QMutex _mutex; static QMutex _mutex;
}; };