Rev 227 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#include "log.h"CLog *CLog::m_pInstance = 0;CLog::CLog() : _iLevel(0), _iFilter(0), _bSaveLog(0){}CLog::~CLog(){}CLog *CLog::create(){if ( !m_pInstance ) {m_pInstance = new CLog();}return m_pInstance;}void CLog::release(){if ( m_pInstance ) {delete m_pInstance;}m_pInstance = 0;}void CLog::log(LogType iType, int iLevel, const Utils::WString& sLogText){CLog* pLogger = CLog::create();pLogger->_log(iType, iLevel, sLogText);}void CLog::addFilter(int iType){_iFilter |= iType;}void CLog::setFilter(int iFilter){_iFilter = iFilter;}void CLog::removeFilter(int iType){_iFilter &= ~(iType);}void CLog::clearFilter(){_iFilter = 0;}void CLog::displayLog(LogType iType, int iLevel, const Utils::WString &sLogText) const{}void CLog::_log(LogType iType, int iLevel, const Utils::WString& sLogText){if (iLevel > _iLevel) return;if (!(_iFilter & iType)) return;if (_bSaveLog) {SLog* newLog = new SLog;newLog->sText = sLogText;newLog->iLevel = iLevel;newLog->iType = iType;m_lLogs.push_back(newLog);}this->displayLog(iType, iLevel, sLogText);}void CLog::logf(LogType iType, int iLevel, const char* sLogText, ...){char buffer[10000];va_list args;va_start(args, sLogText);vsprintf(buffer, sLogText, args);va_end(args);CLog::log(iType, iLevel, Utils::WString::FromString(buffer));}void CLog::logf(LogType iType, int iLevel, const wchar_t* sLogText, ...){wchar_t buffer[10000];va_list args;va_start(args, sLogText);vswprintf_s(buffer, 10000, sLogText, args);va_end(args);CLog::log(iType, iLevel, Utils::WString(buffer));}void CLog::_logf(LogType iType, int iLevel, const char* sLogText, ...){char buffer[10000];va_list args;va_start(args, sLogText);vsprintf(buffer, sLogText, args);va_end(args);this->_log(iType, iLevel, Utils::WString::FromString(buffer));}void CLog::_logf(LogType iType, int iLevel, const wchar_t* sLogText, ...){wchar_t buffer[10000];va_list args;va_start(args, sLogText);vswprintf_s(buffer, 10000, sLogText, args);va_end(args);this->_log(iType, iLevel, Utils::WString(buffer));}void CLog::setLevel(int iLevel){_iLevel = iLevel;}void CLog::clear(){m_lLogs.clear(true);}const SLog *CLog::firstLog() const{if ( !m_lLogs.Front() ) return NULL;return m_lLogs.Front()->Data();}int CLog::count() const{return m_lLogs.size();}/////////////////////////////////////////////////////////////////////////////// File Log///////////////////void CFileLog::_writeLog(int iType, const Utils::WString &sLogText) const{std::wofstream outFile;outFile.open(_sFilename.toStdWString(), std::ios::out | std::ios::app);if ( outFile.is_open() ) {outFile << _timeStamp().toStdWString() << " (" << _typeName(iType).toStdWString() << ") " << sLogText.toStdWString() << std::endl;outFile.close();}}Utils::WString CFileLog::_timeStamp() const{std::wstringstream strm;time_t T = time(NULL);struct tm *TM = localtime(&T);strm << L"[" << Utils::WString::PadNumber(TM->tm_mday, 2).toStdWString() << L"/" << Utils::WString::PadNumber(TM->tm_mon+1, 2).toStdWString() << L"/" << TM->tm_year+1900 << " - " << Utils::WString::PadNumber(TM->tm_hour, 2).toStdWString() << L":" << Utils::WString::PadNumber(TM->tm_min, 2).toStdWString() << L":" << Utils::WString::PadNumber(TM->tm_sec, 2).toStdWString() << L"]";return strm.str();}Utils::WString CFileLog::_typeName(int iType) const{switch(iType) {case Log_Install: return L"INSTALL";case Log_Uninstall: return L"UNINSTALL";case Log_IO: return L"IO";case Log_File: return L"FILE";case Log_Directory: return L"DIRECTORY";}return L"";}