Subversion Repositories spk

Rev

Rev 227 | 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
 
227 cycrow 75
 
76
void CLog::logf(LogType iType, int iLevel, const char* sLogText, ...)
50 cycrow 77
{
7 cycrow 78
	char buffer[10000];
79
	va_list args;
227 cycrow 80
	va_start(args, sLogText);
81
	vsprintf(buffer, sLogText, args);
82
	va_end(args);
7 cycrow 83
 
213 cycrow 84
	CLog::log(iType, iLevel, Utils::WString::FromString(buffer));
7 cycrow 85
}
227 cycrow 86
 
87
void CLog::logf(LogType iType, int iLevel, const wchar_t* sLogText, ...)
7 cycrow 88
{
227 cycrow 89
	wchar_t buffer[10000];
90
	va_list args;
91
	va_start(args, sLogText);
92
	vswprintf_s(buffer, 10000, sLogText, args);
93
	va_end(args);
94
 
95
	CLog::log(iType, iLevel, Utils::WString(buffer));
96
}
97
void CLog::_logf(LogType iType, int iLevel, const char* sLogText, ...)
98
{
7 cycrow 99
	char buffer[10000];
100
	va_list args;
227 cycrow 101
	va_start(args, sLogText);
102
	vsprintf(buffer, sLogText, args);
103
	va_end(args);
7 cycrow 104
 
213 cycrow 105
	this->_log(iType, iLevel, Utils::WString::FromString(buffer));
7 cycrow 106
}
227 cycrow 107
void CLog::_logf(LogType iType, int iLevel, const wchar_t* sLogText, ...)
108
{
109
	wchar_t buffer[10000];
110
	va_list args;
111
	va_start(args, sLogText);
112
	vswprintf_s(buffer, 10000, sLogText, args);
113
	va_end(args);
7 cycrow 114
 
227 cycrow 115
	this->_log(iType, iLevel, Utils::WString(buffer));
116
}
117
 
50 cycrow 118
void CLog::setLevel(int iLevel)
119
{
120
	_iLevel = iLevel;
121
}
122
 
7 cycrow 123
void CLog::clear()
124
{
10 cycrow 125
	m_lLogs.clear(true);
7 cycrow 126
}
127
 
10 cycrow 128
const SLog *CLog::firstLog() const
7 cycrow 129
{
10 cycrow 130
	if ( !m_lLogs.Front() ) return NULL;
131
	return m_lLogs.Front()->Data();
7 cycrow 132
}
9 cycrow 133
 
134
int CLog::count() const
135
{
136
	return m_lLogs.size();
137
}
50 cycrow 138
 
139
/////////////////////////////////////////////////////////////////////////////
140
//	File Log
141
///////////////////
142
 
197 cycrow 143
void CFileLog::_writeLog(int iType, const Utils::WString &sLogText) const
50 cycrow 144
{
197 cycrow 145
	std::wofstream outFile;
285 cycrow 146
	outFile.open(_sFilename.toStdWString(), std::ios::out | std::ios::app);
50 cycrow 147
	if ( outFile.is_open() ) {
285 cycrow 148
		outFile << _timeStamp().toStdWString() << " (" << _typeName(iType).toStdWString() << ") " << sLogText.toStdWString() << std::endl;
50 cycrow 149
		outFile.close();
150
	}
151
}
152
 
197 cycrow 153
Utils::WString CFileLog::_timeStamp() const
50 cycrow 154
{
197 cycrow 155
	std::wstringstream strm;
50 cycrow 156
	time_t T = time(NULL);
157
	struct tm *TM = localtime(&T);
285 cycrow 158
	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"]";
50 cycrow 159
	return strm.str();
160
}
161
 
197 cycrow 162
Utils::WString CFileLog::_typeName(int iType) const
50 cycrow 163
{
164
	switch(iType) {
197 cycrow 165
		case Log_Install:	return L"INSTALL";
166
		case Log_Uninstall: return L"UNINSTALL";
167
		case Log_IO:		return L"IO";
168
		case Log_File:		return L"FILE";
169
		case Log_Directory:	return L"DIRECTORY";
50 cycrow 170
	}
197 cycrow 171
	return L"";
50 cycrow 172
}