You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.0 KiB
C++
72 lines
2.0 KiB
C++
#include "LogManager.h"
|
|
#include <QMutex>
|
|
#include <QDate>
|
|
#include <QTime>
|
|
#include <QObject>
|
|
|
|
LogManager *LogManager::m_pInstance = nullptr;
|
|
QMutex LogManager::m_mutex;
|
|
|
|
|
|
|
|
QString LogManager::buildLogString(QString file, int line, QString func, int level, QString log)
|
|
{
|
|
QString s;
|
|
s.append(QObject::tr("[%1 %2] ").arg(QDate::currentDate().toString("yyyy-MM-dd")).arg(QTime::currentTime().toString("hh:mm:ss")));
|
|
#ifdef _DEBUG
|
|
s.append(QObject::tr("[%1 : %2] ").arg(file).arg(line));
|
|
s.append(QObject::tr("[%1] ").arg(func));
|
|
#endif
|
|
s.append(QObject::tr("%1").arg(log));
|
|
return s;
|
|
}
|
|
|
|
void LogManager::addLog(QString file, int line, QString func, int level, QString log)
|
|
{
|
|
// QString s = buildLogString(file, line, func, level, log);
|
|
// emit logAdded(s);
|
|
addRepeatFiltedLog(file, line, func, level, log);
|
|
}
|
|
|
|
// 过滤重复日志
|
|
void LogManager::addRepeatFiltedLog(QString file, int line, QString func, int level, QString log)
|
|
{
|
|
if(isSameLog(file, line, func, level, log))
|
|
{
|
|
m_lastTimes++;
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
if(m_lastTimes > 1)
|
|
{
|
|
QString lastLogString = buildLogString(m_lastFile, m_lastLine, m_lastFunc, m_lastLevel, m_lastLog);
|
|
lastLogString.append(tr(" - repeat times[%1]").arg(m_lastTimes));
|
|
emit logAdded(lastLogString);
|
|
}
|
|
QString logString = buildLogString(file, line, func, level, log);
|
|
emit logAdded(logString);
|
|
|
|
m_lastFile = file;
|
|
m_lastLine = line;
|
|
m_lastFunc = func;
|
|
m_lastLevel = level;
|
|
m_lastLog = log;
|
|
m_lastTimes = 1;
|
|
}
|
|
}
|
|
|
|
|
|
bool LogManager::isSameLog(QString file, int line, QString func, int level, QString log)
|
|
{
|
|
if(!m_lastFile.isEmpty() && !m_lastFunc.isEmpty() && !m_lastLog.isEmpty() &&
|
|
(m_lastFile.compare(file) == 0) && (m_lastLine == line) &&
|
|
(m_lastFunc.compare(func) == 0) && (m_lastLevel == level) &&
|
|
(m_lastLog.compare(log) == 0))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|