Subversion Repositories spk

Rev

Rev 197 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 cycrow 1
#pragma once
2
 
197 cycrow 3
#include "../Utils/WStringList.h"
1 cycrow 4
#include <vector>
8 cycrow 5
#include <stdarg.h>
50 cycrow 6
#include <fstream>
7
#include <time.h>
8
#include <sstream>
1 cycrow 9
 
10
typedef struct {
197 cycrow 11
	Utils::WString	sText;
10 cycrow 12
	int				iLevel;
50 cycrow 13
	int				iType;
1 cycrow 14
} SLog;
15
 
7 cycrow 16
class SPKEXPORT CLog
1 cycrow 17
{
18
public:
10 cycrow 19
	typedef CLinkList<SLog> LogList;
20
	typedef CListNode<SLog>* LogNode;
7 cycrow 21
 
50 cycrow 22
	enum LogType {
23
		Log_All			= -1,
24
		Log_None		= 0,
10 cycrow 25
		Log_Normal		= 1,
26
		Log_IO			= 2,
27
		Log_EditPackage = 4,
28
		Log_File		= 8,
29
		Log_Read		= 16,
50 cycrow 30
		Log_Install		= 32,
31
		Log_Uninstall	= 64,
84 cycrow 32
		Log_Directory	= 128,
10 cycrow 33
	};
34
 
7 cycrow 35
protected:
36
	// private constructor
37
	CLog(void);
38
	virtual ~CLog(void);
39
 
40
private:
41
	LogList	m_lLogs;
50 cycrow 42
	int		_iLevel;
43
	int		_iFilter;
44
	bool	_bSaveLog;
7 cycrow 45
 
46
public:
1 cycrow 47
	static CLog *m_pInstance;
48
	static CLog *create();
49
	static void release();
50
 
197 cycrow 51
	static void log(LogType iType, int iLevel, const Utils::WString& sLogText);
227 cycrow 52
	static void logf(LogType iType, int iLevel, const char* sLogText, ...);
53
	static void logf(LogType iType, int iLevel, const wchar_t* sLogText, ...);
197 cycrow 54
	void _log(LogType iType, int iLevel, const Utils::WString& sLogText);
227 cycrow 55
	void _logf(LogType iType, int iLevel, const char* sLogText, ...);
56
	void _logf(LogType iType, int iLevel, const wchar_t* sLogText, ...);
1 cycrow 57
 
197 cycrow 58
	virtual void displayLog(LogType iType, int iLevel, const Utils::WString &sLogText) const;
50 cycrow 59
	void setLevel(int iLevel);
60
	void addFilter(int iType);
61
	void setFilter(int iFilter);
62
	void removeFilter(int iType);
63
	void clearFilter();
1 cycrow 64
 
7 cycrow 65
	void clear();
10 cycrow 66
	const SLog *firstLog() const;
9 cycrow 67
	int count() const;
1 cycrow 68
};
7 cycrow 69
 
70
//TODO: move this
71
class SPKEXPORT CConsoleLog : public CLog 
72
{
73
public:
74
	static CLog *create()
75
	{
76
		if ( !CLog::m_pInstance ) {
77
			CLog::m_pInstance = new CConsoleLog();
78
		}
79
		return CLog::m_pInstance;
80
	}
81
 
82
	virtual ~CConsoleLog(void)
83
	{
84
	}
197 cycrow 85
	virtual void displayLog(LogType iType, int iLevel, const Utils::WString &sLogText) const
7 cycrow 86
	{
197 cycrow 87
		wprintf(L"%s\n", sLogText.c_str());
7 cycrow 88
	}
89
};
50 cycrow 90
 
91
class SPKEXPORT CFileLog : public CLog 
92
{
93
private:
197 cycrow 94
	Utils::WString _sFilename;
50 cycrow 95
 
96
public:
97
	static CLog *create()
98
	{
99
		if ( !CLog::m_pInstance ) {
100
			CLog::m_pInstance = new CFileLog();
101
		}
102
		return CLog::m_pInstance;
103
	}
104
 
197 cycrow 105
	void setFile(const Utils::WString &sFileName)
50 cycrow 106
	{
107
		_sFilename = sFileName;
108
	}
109
 
110
	virtual ~CFileLog(void)
111
	{
112
	}
197 cycrow 113
	virtual void displayLog(LogType iType, int iLevel, const Utils::WString &sLogText) const
50 cycrow 114
	{
115
		_writeLog(iType, sLogText);
116
	}
117
 
118
private:
197 cycrow 119
	void _writeLog(int iType, const Utils::WString &sLogText) const;
120
	Utils::WString _timeStamp() const;
121
	Utils::WString _formatTime(int iValue) const;
122
	Utils::WString _typeName(int iType) const;
50 cycrow 123
};