Rev 197 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#pragma once#include "../Utils/WStringList.h"#include <vector>#include <stdarg.h>#include <fstream>#include <time.h>#include <sstream>typedef struct {Utils::WString 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::WString& sLogText);static void logf(LogType iType, int iLevel, const char* sLogText, ...);static void logf(LogType iType, int iLevel, const wchar_t* sLogText, ...);void _log(LogType iType, int iLevel, const Utils::WString& sLogText);void _logf(LogType iType, int iLevel, const char* sLogText, ...);void _logf(LogType iType, int iLevel, const wchar_t* sLogText, ...);virtual void displayLog(LogType iType, int iLevel, const Utils::WString &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::WString &sLogText) const{wprintf(L"%s\n", sLogText.c_str());}};class SPKEXPORT CFileLog : public CLog{private:Utils::WString _sFilename;public:static CLog *create(){if ( !CLog::m_pInstance ) {CLog::m_pInstance = new CFileLog();}return CLog::m_pInstance;}void setFile(const Utils::WString &sFileName){_sFilename = sFileName;}virtual ~CFileLog(void){}virtual void displayLog(LogType iType, int iLevel, const Utils::WString &sLogText) const{_writeLog(iType, sLogText);}private:void _writeLog(int iType, const Utils::WString &sLogText) const;Utils::WString _timeStamp() const;Utils::WString _formatTime(int iValue) const;Utils::WString _typeName(int iType) const;};