Rev 84 | Rev 213 | Go to most recent revision | 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, 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, 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, std::ios::out | std::ios::app);
if ( outFile.is_open() ) {
outFile << _timeStamp() << " (" << _typeName(iType) << ") " << sLogText << 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) << L"/" << Utils::WString::PadNumber(TM->tm_mon+1, 2) << L"/" << TM->tm_year+1900 << " - " << Utils::WString::PadNumber(TM->tm_hour, 2) << L":" << Utils::WString::PadNumber(TM->tm_min, 2) << L":" << Utils::WString::PadNumber(TM->tm_sec, 2) << 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"";
}