LogHandler class stores regexps - code tweaks

Code standard changes from review.
This commit is contained in:
Simon Walton 2018-03-09 15:11:05 -08:00
parent 4b27cd73ff
commit d4cf22fbaf
2 changed files with 23 additions and 15 deletions

View file

@ -117,10 +117,12 @@ 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) break; if (repeatRegex->messageCount++ == 0) {
break;
}
repeatRegex->lastMessage = message; repeatRegex->lastMessage = message;
return QString(); return QString();
} }
@ -131,11 +133,17 @@ QString LogHandler::printMessage(LogMsgType type, const QMessageLogContext& cont
// 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) break; // we have a match and haven't yet printed this message. if (onceOnly->messageCount++ == 0) {
else return QString(); // We've already printed this message, don't print it again. // we have a match and haven't yet printed this message.
break;
}
else {
// We've already printed this message, don't print it again.
return QString();
} }
} }
} }
}
// log prefix is in the following format // log prefix is in the following format
// [TIMESTAMP] [DEBUG] [PID] [TID] [TARGET] logged string // [TIMESTAMP] [DEBUG] [PID] [TID] [TARGET] logged string
@ -197,7 +205,7 @@ 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()); std::unique_ptr<RepeatedMessage> repeatRecord(new RepeatedMessage());
repeatRecord->regexp = QRegExp(regexString); repeatRecord->regexp = QRegExp(regexString);
_repeatedMessages.insert(std::move(repeatRecord)); _repeatedMessages.insert(std::move(repeatRecord));
return regexString; return regexString;
@ -205,7 +213,7 @@ const QString& LogHandler::addRepeatedMessageRegex(const QString& 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()); std::unique_ptr<OnceOnlyMessage> onetimeMessage(new OnceOnlyMessage());
onetimeMessage->regexp = QRegExp(regexString); onetimeMessage->regexp = QRegExp(regexString);
_onetimeMessages.insert(std::move(onetimeMessage)); _onetimeMessages.insert(std::move(onetimeMessage));
return regexString; return regexString;

View file

@ -68,18 +68,18 @@ private:
bool _shouldOutputThreadID { false }; bool _shouldOutputThreadID { false };
bool _shouldDisplayMilliseconds { false }; bool _shouldDisplayMilliseconds { false };
struct _RepeatedMessage { struct RepeatedMessage {
QRegExp regexp; QRegExp regexp;
int messageCount { 0 }; int messageCount { 0 };
QString lastMessage; QString lastMessage;
}; };
std::set<std::unique_ptr<_RepeatedMessage>> _repeatedMessages; std::set<std::unique_ptr<RepeatedMessage>> _repeatedMessages;
struct _OnceOnlyMessage { struct OnceOnlyMessage {
QRegExp regexp; QRegExp regexp;
int messageCount { 0 }; int messageCount { 0 };
}; };
std::set<std::unique_ptr<_OnceOnlyMessage>> _onetimeMessages; std::set<std::unique_ptr<OnceOnlyMessage>> _onetimeMessages;
static QMutex _mutex; static QMutex _mutex;
}; };