Subversion Repositories spk

Rev

Rev 197 | Rev 227 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 cycrow 1
#include "log.h"
2
 
3
CLog *CLog::m_pInstance = 0;
4
 
50 cycrow 5
CLog::CLog() : _iLevel(0), _iFilter(0), _bSaveLog(0)
1 cycrow 6
{
7
}
8
 
9
CLog::~CLog()
10
{
11
}
12
 
13
CLog *CLog::create()
14
{
15
	if ( !m_pInstance ) {
16
		m_pInstance = new CLog();
17
	}
18
	return m_pInstance;
19
}
20
 
21
void CLog::release()
22
{
23
	if ( m_pInstance ) {
24
		delete m_pInstance;
25
	}
26
	m_pInstance = 0;
27
}
28
 
197 cycrow 29
void CLog::log(LogType iType, int iLevel, const Utils::WString& sLogText)
1 cycrow 30
{
197 cycrow 31
	CLog* pLogger = CLog::create();
50 cycrow 32
	pLogger->_log(iType, iLevel, sLogText);
1 cycrow 33
}
34
 
50 cycrow 35
void CLog::addFilter(int iType)
7 cycrow 36
{
50 cycrow 37
	_iFilter |= iType;
7 cycrow 38
}
39
 
50 cycrow 40
void CLog::setFilter(int iFilter)
1 cycrow 41
{
50 cycrow 42
	_iFilter = iFilter;
43
}
7 cycrow 44
 
50 cycrow 45
void CLog::removeFilter(int iType)
46
{
47
	_iFilter &= ~(iType);
7 cycrow 48
}
49
 
50 cycrow 50
void CLog::clearFilter()
7 cycrow 51
{
50 cycrow 52
	_iFilter = 0;
53
}
54
 
197 cycrow 55
void CLog::displayLog(LogType iType, int iLevel, const Utils::WString &sLogText) const
50 cycrow 56
{
57
}
58
 
197 cycrow 59
void CLog::_log(LogType iType, int iLevel, const Utils::WString& sLogText)
50 cycrow 60
{
197 cycrow 61
	if (iLevel > _iLevel) return;
62
	if (!(_iFilter & iType)) return;
50 cycrow 63
 
197 cycrow 64
	if (_bSaveLog) {
65
		SLog* newLog = new SLog;
50 cycrow 66
		newLog->sText = sLogText;
67
		newLog->iLevel = iLevel;
68
		newLog->iType = iType;
69
		m_lLogs.push_back(newLog);
70
	}
71
 
72
	this->displayLog(iType, iLevel, sLogText);
73
}
74
 
75
void CLog::logf(LogType iType, int iLevel, const char *sLogText, ...)
76
{
7 cycrow 77
	char buffer[10000];
78
	va_list args;
79
	va_start (args, sLogText);
80
	vsprintf (buffer, sLogText, args);
81
	va_end (args);
82
 
213 cycrow 83
	CLog::log(iType, iLevel, Utils::WString::FromString(buffer));
7 cycrow 84
}
50 cycrow 85
void CLog::_logf(LogType iType, int iLevel, const char *sLogText, ...)
7 cycrow 86
{
87
	char buffer[10000];
88
	va_list args;
89
	va_start (args, sLogText);
90
	vsprintf (buffer, sLogText, args);
91
	va_end (args);
92
 
213 cycrow 93
	this->_log(iType, iLevel, Utils::WString::FromString(buffer));
7 cycrow 94
}
95
 
50 cycrow 96
void CLog::setLevel(int iLevel)
97
{
98
	_iLevel = iLevel;
99
}
100
 
7 cycrow 101
void CLog::clear()
102
{
10 cycrow 103
	m_lLogs.clear(true);
7 cycrow 104
}
105
 
10 cycrow 106
const SLog *CLog::firstLog() const
7 cycrow 107
{
10 cycrow 108
	if ( !m_lLogs.Front() ) return NULL;
109
	return m_lLogs.Front()->Data();
7 cycrow 110
}
9 cycrow 111
 
112
int CLog::count() const
113
{
114
	return m_lLogs.size();
115
}
50 cycrow 116
 
117
/////////////////////////////////////////////////////////////////////////////
118
//	File Log
119
///////////////////
120
 
197 cycrow 121
void CFileLog::_writeLog(int iType, const Utils::WString &sLogText) const
50 cycrow 122
{
197 cycrow 123
	std::wofstream outFile;
50 cycrow 124
	outFile.open(_sFilename, std::ios::out | std::ios::app);
125
	if ( outFile.is_open() ) {
126
		outFile << _timeStamp() << " (" << _typeName(iType) << ") " << sLogText << std::endl;
127
		outFile.close();
128
	}
129
}
130
 
197 cycrow 131
Utils::WString CFileLog::_timeStamp() const
50 cycrow 132
{
197 cycrow 133
	std::wstringstream strm;
50 cycrow 134
	time_t T = time(NULL);
135
	struct tm *TM = localtime(&T);
197 cycrow 136
	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"]";
50 cycrow 137
	return strm.str();
138
}
139
 
197 cycrow 140
Utils::WString CFileLog::_typeName(int iType) const
50 cycrow 141
{
142
	switch(iType) {
197 cycrow 143
		case Log_Install:	return L"INSTALL";
144
		case Log_Uninstall: return L"UNINSTALL";
145
		case Log_IO:		return L"IO";
146
		case Log_File:		return L"FILE";
147
		case Log_Directory:	return L"DIRECTORY";
50 cycrow 148
	}
197 cycrow 149
	return L"";
50 cycrow 150
}