Subversion Repositories spk

Rev

Rev 50 | Rev 197 | 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,
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
 
50 cycrow 51
	static void log(LogType iType, int iLevel, const Utils::String &sLogText);
52
	static void logf(LogType iType, int iLevel, const char *sLogText, ...);
53
	void _log(LogType iType, int iLevel, const Utils::String &sLogText);
54
	void _logf(LogType iType, int iLevel, const char *sLogText, ...);
1 cycrow 55
 
50 cycrow 56
	virtual void displayLog(LogType iType, int iLevel, const Utils::String &sLogText) const;
57
	void setLevel(int iLevel);
58
	void addFilter(int iType);
59
	void setFilter(int iFilter);
60
	void removeFilter(int iType);
61
	void clearFilter();
1 cycrow 62
 
7 cycrow 63
	void clear();
10 cycrow 64
	const SLog *firstLog() const;
9 cycrow 65
	int count() const;
1 cycrow 66
};
7 cycrow 67
 
68
//TODO: move this
69
class SPKEXPORT CConsoleLog : public CLog 
70
{
71
public:
72
	static CLog *create()
73
	{
74
		if ( !CLog::m_pInstance ) {
75
			CLog::m_pInstance = new CConsoleLog();
76
		}
77
		return CLog::m_pInstance;
78
	}
79
 
80
	virtual ~CConsoleLog(void)
81
	{
82
	}
50 cycrow 83
	virtual void displayLog(LogType iType, int iLevel, const Utils::String &sLogText) const
7 cycrow 84
	{
8 cycrow 85
		printf("%s\n", sLogText.c_str());
7 cycrow 86
	}
87
};
50 cycrow 88
 
89
class SPKEXPORT CFileLog : public CLog 
90
{
91
private:
92
	Utils::String _sFilename;
93
 
94
public:
95
	static CLog *create()
96
	{
97
		if ( !CLog::m_pInstance ) {
98
			CLog::m_pInstance = new CFileLog();
99
		}
100
		return CLog::m_pInstance;
101
	}
102
 
103
	void setFile(const Utils::String &sFileName)
104
	{
105
		_sFilename = sFileName;
106
	}
107
 
108
	virtual ~CFileLog(void)
109
	{
110
	}
111
	virtual void displayLog(LogType iType, int iLevel, const Utils::String &sLogText) const
112
	{
113
		_writeLog(iType, sLogText);
114
	}
115
 
116
private:
117
	void _writeLog(int iType, const Utils::String &sLogText) const;
118
	Utils::String _timeStamp() const;
119
	Utils::String _formatTime(int iValue) const;
120
	Utils::String _typeName(int iType) const;
121
};