LoggerInterface.h 3.2 KB

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