Subversion Repositories spk

Rev

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

Rev Author Line No. Line
1 cycrow 1
#pragma once
2
 
8 cycrow 3
#include "../Utils/StringList.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 {
8 cycrow 11
	Utils::String	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,
10 cycrow 32
	};
33
 
7 cycrow 34
protected:
35
	// private constructor
36
	CLog(void);
37
	virtual ~CLog(void);
38
 
39
private:
40
	LogList	m_lLogs;
50 cycrow 41
	int		_iLevel;
42
	int		_iFilter;
43
	bool	_bSaveLog;
7 cycrow 44
 
45
public:
1 cycrow 46
	static CLog *m_pInstance;
47
	static CLog *create();
48
	static void release();
49
 
50 cycrow 50
	static void log(LogType iType, int iLevel, const Utils::String &sLogText);
51
	static void logf(LogType iType, int iLevel, const char *sLogText, ...);
52
	void _log(LogType iType, int iLevel, const Utils::String &sLogText);
53
	void _logf(LogType iType, int iLevel, const char *sLogText, ...);
1 cycrow 54
 
50 cycrow 55
	virtual void displayLog(LogType iType, int iLevel, const Utils::String &sLogText) const;
56
	void setLevel(int iLevel);
57
	void addFilter(int iType);
58
	void setFilter(int iFilter);
59
	void removeFilter(int iType);
60
	void clearFilter();
1 cycrow 61
 
7 cycrow 62
	void clear();
10 cycrow 63
	const SLog *firstLog() const;
9 cycrow 64
	int count() const;
1 cycrow 65
};
7 cycrow 66
 
67
//TODO: move this
68
class SPKEXPORT CConsoleLog : public CLog 
69
{
70
public:
71
	static CLog *create()
72
	{
73
		if ( !CLog::m_pInstance ) {
74
			CLog::m_pInstance = new CConsoleLog();
75
		}
76
		return CLog::m_pInstance;
77
	}
78
 
79
	virtual ~CConsoleLog(void)
80
	{
81
	}
50 cycrow 82
	virtual void displayLog(LogType iType, int iLevel, const Utils::String &sLogText) const
7 cycrow 83
	{
8 cycrow 84
		printf("%s\n", sLogText.c_str());
7 cycrow 85
	}
86
};
50 cycrow 87
 
88
class SPKEXPORT CFileLog : public CLog 
89
{
90
private:
91
	Utils::String _sFilename;
92
 
93
public:
94
	static CLog *create()
95
	{
96
		if ( !CLog::m_pInstance ) {
97
			CLog::m_pInstance = new CFileLog();
98
		}
99
		return CLog::m_pInstance;
100
	}
101
 
102
	void setFile(const Utils::String &sFileName)
103
	{
104
		_sFilename = sFileName;
105
	}
106
 
107
	virtual ~CFileLog(void)
108
	{
109
	}
110
	virtual void displayLog(LogType iType, int iLevel, const Utils::String &sLogText) const
111
	{
112
		_writeLog(iType, sLogText);
113
	}
114
 
115
private:
116
	void _writeLog(int iType, const Utils::String &sLogText) const;
117
	Utils::String _timeStamp() const;
118
	Utils::String _formatTime(int iValue) const;
119
	Utils::String _typeName(int iType) const;
120
};