Add log limiting #44

develop
Geoffrey Merck 2 years ago
parent 72ae922a1c
commit 5fb1c02866

@ -27,6 +27,9 @@
bool CLog::m_addedTargets(false); bool CLog::m_addedTargets(false);
std::recursive_mutex CLog::m_targetsMutex; std::recursive_mutex CLog::m_targetsMutex;
std::vector<CLogTarget *> CLog::m_targets = { new CLogConsoleTarget(LOG_DEBUG) }; std::vector<CLogTarget *> CLog::m_targets = { new CLogConsoleTarget(LOG_DEBUG) };
std::string CLog::m_prevMsg = "";
int CLog::m_prevMsgCount = 0;
void CLog::addTarget(CLogTarget* target) void CLog::addTarget(CLogTarget* target)
{ {

@ -35,6 +35,8 @@ private:
static std::vector<CLogTarget *> m_targets; static std::vector<CLogTarget *> m_targets;
static bool m_addedTargets; static bool m_addedTargets;
static std::recursive_mutex m_targetsMutex; static std::recursive_mutex m_targetsMutex;
static std::string m_prevMsg;
static int m_prevMsgCount;
static void getTimeStamp(std::string& s); static void getTimeStamp(std::string& s);
@ -68,12 +70,9 @@ private:
break; break;
} }
std::string timestamp; std::string f2("[%s] ");
getTimeStamp(timestamp);
std::string f2("[%s] [%s] ");
f2.append(f); f2.append(f);
CStringUtils::string_format_in_place(output, f2, timestamp.c_str(), severityStr.c_str(), args...); CStringUtils::string_format_in_place(output, f2, severityStr.c_str(), args...);
boost::trim_if(output, [](char c){ return c == '\n' || c == '\r' || c == ' ' || c == '\t'; }); boost::trim_if(output, [](char c){ return c == '\n' || c == '\r' || c == ' ' || c == '\t'; });
output.push_back('\n'); output.push_back('\n');
} }
@ -117,15 +116,37 @@ public:
{ {
std::lock_guard lockTarget(m_targetsMutex); std::lock_guard lockTarget(m_targetsMutex);
if(m_targets.empty())
return;
std::string timestamp;
getTimeStamp(timestamp);
std::string msg; std::string msg;
for(auto target : m_targets) { formatLogMessage(msg, severity, f, args...);
if(severity >= target->getLevel()) {
if(msg.empty()) if(msg.compare(m_prevMsg) == 0) {
formatLogMessage(msg, severity, f, args...); m_prevMsgCount++;
return;
}
else if(m_prevMsgCount != 0) {
formatLogMessage(msg, severity, "Previous message repeated %d times", m_prevMsgCount);
}
m_prevMsg.assign(msg);
std::string msgts;
CStringUtils::string_format_in_place(msgts, "[%s] %s", timestamp.c_str(), msg.c_str());
target->printLog(msg); for(auto target : m_targets) {
if(severity >= target->getLevel()) {
target->printLog(msgts);
} }
} }
if(m_prevMsgCount != 0) {
m_prevMsgCount = 0;
log(severity, f, args ...);
}
} }
}; };

Loading…
Cancel
Save

Powered by TurnKey Linux.