LoggerInterface.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #pragma once
  2. #include <map>
  3. #include <vector>
  4. #include <list>
  5. #include <string>
  6. #ifdef _LOG_CLASSINDLL
  7. #define LOGMGR_CLASS_DECL _declspec(dllexport)
  8. #else
  9. #define LOGMGR_CLASS_DECL _declspec(dllimport)
  10. #endif
  11. #ifndef _LOG_CLASSINDLL
  12. #ifdef X64
  13. #ifdef _DEBUG
  14. #pragma comment(lib, "LoggerX64D.lib")
  15. #else
  16. #pragma comment(lib, "LoggerX64.lib")
  17. #endif
  18. #else
  19. #ifdef _DEBUG
  20. #pragma comment(lib, "LoggerD.lib")
  21. #else
  22. #pragma comment(lib, "Logger.lib")
  23. #endif
  24. #endif
  25. #endif
  26. namespace DIOS_Kernel
  27. {
  28. enum LogWriteMode
  29. {
  30. WRITEMODE_NONE,
  31. WRITEMODE_DEBUGVIEW = 1,
  32. WRITEMODE_LOGFILE = 2,
  33. WRITEMODE_OUTPUT = 4,
  34. };
  35. enum LogInfoType
  36. {
  37. LOGINFO_LOGMODULENAME,
  38. LOGINFO_LOGCONTENT,
  39. LOGINFO_DATATIME,
  40. /*LOGINFO_ERRORLINE,
  41. LOGINFO_ERRORFILENAME,
  42. LOGINFO_LOGCONTENT,
  43. LOGINFO_LOGLEVEL,
  44. LOGINFO_WRITEMODE,
  45. LOGINFO_MODULES,
  46. LOGINFO_MSGID,
  47. LOGINFO_SOURCE,
  48. LOGINFO_DATE,
  49. LOGINFO_TIME,
  50. LOGINFO_HOSTNAME,
  51. LOGINFO_IP,
  52. LOGINFO_PROCESSNAME,
  53. LOGINFO_MSGFILESNAME,
  54. LOGINFO_LINENAME,
  55. LOGINFO_PARALIST,
  56. LOGINFO_FREETEXT,
  57. LOGINFO_VERSION,
  58. LOGINFO_COMMENTS,*/
  59. };
  60. class ILogControler;
  61. typedef void(*CallbackWriteFunc)(ILogControler* pLogFileCtrl, const wchar_t* pwszValue);
  62. class LOGMGR_CLASS_DECL CLogTask
  63. {
  64. public:
  65. virtual ~CLogTask();
  66. bool SetEnvironment(LogInfoType eKey, const wchar_t* pwszValue);
  67. bool SetContents(const wchar_t* wszKey, const wchar_t* wszValue);
  68. CLogTask* Clone();
  69. bool IsValid();
  70. typedef struct _stCallbackWriteFunc
  71. {
  72. ILogControler* pControler;
  73. CallbackWriteFunc pFunc;
  74. _stCallbackWriteFunc()
  75. {
  76. memset(this, 0, sizeof(_stCallbackWriteFunc));
  77. }
  78. }
  79. STWriteFunc;
  80. private:
  81. CLogTask();
  82. void Write();
  83. void AddWriteFunction(const STWriteFunc& stInfo);
  84. std::map<LogInfoType, std::wstring>* m_pEnvironmentMap;
  85. std::map<std::wstring, std::wstring>* m_pContentsMap;
  86. std::vector<STWriteFunc>* m_pvecCallbackWriteFunc;
  87. friend class ILogMgr;
  88. friend class ILogControler;
  89. };
  90. class LOGMGR_CLASS_DECL ILogMgr
  91. {
  92. public:
  93. CLogTask* CreateLogTask();
  94. virtual void Fatal(CLogTask* pTask) = 0;
  95. virtual void Error(CLogTask* pTask) = 0;
  96. virtual void Warning(CLogTask* pTask) = 0;
  97. virtual void Info(CLogTask* pTask) = 0;
  98. protected:
  99. void WriteTask(CLogTask* pLogTask);
  100. void AddWriteFunction(CLogTask* pLogTask, const CLogTask::STWriteFunc& stInfo);
  101. };
  102. class CDIOSThreadLock;
  103. class ILogControler;
  104. class CThreadProcess;
  105. class LOGMGR_CLASS_DECL CLogMgr : public ILogMgr
  106. {
  107. public:
  108. CLogMgr();
  109. virtual ~CLogMgr();
  110. void SetEnvironment(LogInfoType eKey, const wchar_t* pwszValue);
  111. bool Init(int nWriteMode);
  112. void WriteEnable(bool bEnable);
  113. virtual void Fatal(CLogTask* pTask);
  114. virtual void Error(CLogTask* pTask);
  115. virtual void Warning(CLogTask* pTask);
  116. virtual void Info(CLogTask* pTask);
  117. private:
  118. static unsigned int LogInfoThread(void* param);
  119. CLogTask* GetLogInfoFromList();
  120. int GetLogListCount();
  121. bool m_bInit;
  122. CThreadProcess* m_pThreadProcess;
  123. std::vector<ILogControler*>* m_pvecControlers;
  124. std::map<LogInfoType, std::wstring>* m_pEnvironmentMap;
  125. CDIOSThreadLock* m_ListLock;
  126. std::list<CLogTask*>* m_pLogList; //´æ·ÅÐèÒªÏÔʾµÄͼÏñ
  127. bool m_bWriteEnbale;
  128. };
  129. class LOGMGR_CLASS_DECL CLogClient
  130. {
  131. public:
  132. CLogClient(DIOS_Kernel::ILogMgr* plogger);
  133. virtual ~CLogClient() {};
  134. bool Init();
  135. void LogInfo(const wchar_t *wszformat, ...);
  136. void LogWarning(const wchar_t *wszformat, ...);
  137. void LogError(const wchar_t *wszformat, ...);
  138. void LogFatal(const wchar_t *wszformat, ...);
  139. private:
  140. DIOS_Kernel::ILogMgr* m_plogger;
  141. bool m_bInit;
  142. };
  143. }