#include "Logger.h" #include #include GLogger* GLogger::m_ptrLogger = nullptr; GLogger::GLogger() { m_bOpen = false; m_bWrite = true; m_strDir = QApplication::applicationDirPath(); m_strDir += "/Log/"; m_strName = "MyLog"; m_nIndex = 0; m_eLogLevel = eLL_Info; m_varDateTime = QDateTime::currentDateTime(); } GLogger* GLogger::GetInstance() { if (nullptr == m_ptrLogger) { m_ptrLogger = new GLogger(); } return m_ptrLogger; } void GLogger::FreeInstance() { if (nullptr != m_ptrLogger) { m_ptrLogger->Close(); delete m_ptrLogger; m_ptrLogger = nullptr; } } GLogger::~GLogger() { Close(); } void GLogger::SetDir(const QString& strDir) { m_strDir = strDir; if (*m_strDir.rbegin() != '/' && *m_strDir.rbegin() != '\\') { m_strDir += "/"; } } void GLogger::SetName(const QString& strName) { m_strName = strName; } void GLogger::SetWriteFlag(bool bWrite) { m_bWrite = bWrite; } void GLogger::SetLogLevel(eLogLevel elogLevel) { m_eLogLevel = elogLevel; } bool GLogger::Open() { if (!m_bWrite) { return false; } Close(); QDir varDir; bool bRs = false; if (!varDir.exists(m_strDir)) { bRs = varDir.mkpath(m_strDir); } else { bRs = true; } if (!bRs) { return false; } m_varDateTime = QDateTime::currentDateTime(); QString strFileName = m_strDir + m_strName + "_" + m_varDateTime.toString("yyyyMMdd") + QString(".%1").arg(m_nIndex + 1) + ".log"; m_varFile.setFileName(strFileName); if (!m_varFile.open(QIODevice::WriteOnly | QIODevice::Append)) { return false; } m_bOpen = true; return true; } void GLogger::Close() { if (m_bOpen) { m_varFile.flush(); m_varFile.close(); m_bOpen = false; } } bool GLogger::WriteMsg(const QString& strMsg) { m_mutexLocker.lock(); if (!m_bWrite) { m_mutexLocker.unlock(); return true; } if (!m_bOpen) { if (!Open()) { m_mutexLocker.unlock(); return false; } } if (IsNewDay()) { Close(); m_nIndex = 0; Open(); } QDateTime varCurDateTime = QDateTime::currentDateTime(); QString strLogMsg = QString("[%1]\t%2\r\n") .arg(varCurDateTime.toString("hh:mm:ss.zzz")) .arg(strMsg); m_varFile.write(strLogMsg.toStdString().c_str()); m_varFile.flush(); // if (m_varFile.size() > 10 * 1024 * 1024) { m_nIndex++; Close(); Open(); } m_mutexLocker.unlock(); return true; } bool GLogger::WriteDebug(const QString& strMsg) { if (m_eLogLevel > eLL_Debug) { return false; } QString strLogMsg = "debug: " + strMsg; WriteMsg(strLogMsg); return true; } bool GLogger::WriteInfo(const QString& strMsg) { if (m_eLogLevel > eLL_Info) { return false; } QString strLogMsg = "info: " + strMsg; WriteMsg(strLogMsg); return true; } bool GLogger::WriteWaring(const QString& strMsg) { if (m_eLogLevel > eLL_Warning) { return false; } QString strLogMsg = "warning: " + strMsg; WriteMsg(strLogMsg); return true; } bool GLogger::WriteError(const QString& strMsg) { if (m_eLogLevel > eLL_Error) { return false; } QString strLogMsg = "error: " + strMsg; WriteMsg(strLogMsg); return true; } bool GLogger::IsNewDay() { QDateTime varCurDate = QDateTime::currentDateTime(); if (0 == varCurDate.toString("yyyyMMdd").compare(m_varDateTime.toString("yyyyMMdd"))) { return false; } return true; }