Rev 50 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#pragma once#include "../Utils/StringList.h"#include <vector>#include <stdarg.h>#include <fstream>#include <time.h>#include <sstream>typedef struct {Utils::String sText;int iLevel;int iType;} SLog;class SPKEXPORT CLog{public:typedef CLinkList<SLog> LogList;typedef CListNode<SLog>* LogNode;enum LogType {Log_All = -1,Log_None = 0,Log_Normal = 1,Log_IO = 2,Log_EditPackage = 4,Log_File = 8,Log_Read = 16,Log_Install = 32,Log_Uninstall = 64,Log_Directory = 128,};protected:// private constructorCLog(void);virtual ~CLog(void);private:LogList m_lLogs;int _iLevel;int _iFilter;bool _bSaveLog;public:static CLog *m_pInstance;static CLog *create();static void release();static void log(LogType iType, int iLevel, const Utils::String &sLogText);static void logf(LogType iType, int iLevel, const char *sLogText, ...);void _log(LogType iType, int iLevel, const Utils::String &sLogText);void _logf(LogType iType, int iLevel, const char *sLogText, ...);virtual void displayLog(LogType iType, int iLevel, const Utils::String &sLogText) const;void setLevel(int iLevel);void addFilter(int iType);void setFilter(int iFilter);void removeFilter(int iType);void clearFilter();void clear();const SLog *firstLog() const;int count() const;};//TODO: move thisclass SPKEXPORT CConsoleLog : public CLog{public:static CLog *create(){if ( !CLog::m_pInstance ) {CLog::m_pInstance = new CConsoleLog();}return CLog::m_pInstance;}virtual ~CConsoleLog(void){}virtual void displayLog(LogType iType, int iLevel, const Utils::String &sLogText) const{printf("%s\n", sLogText.c_str());}};class SPKEXPORT CFileLog : public CLog{private:Utils::String _sFilename;public:static CLog *create(){if ( !CLog::m_pInstance ) {CLog::m_pInstance = new CFileLog();}return CLog::m_pInstance;}void setFile(const Utils::String &sFileName){_sFilename = sFileName;}virtual ~CFileLog(void){}virtual void displayLog(LogType iType, int iLevel, const Utils::String &sLogText) const{_writeLog(iType, sLogText);}private:void _writeLog(int iType, const Utils::String &sLogText) const;Utils::String _timeStamp() const;Utils::String _formatTime(int iValue) const;Utils::String _typeName(int iType) const;};