中间件底层,websocket

LoggerEntity.h 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /*************************************************************************
  2. 【文件名】 LoggerEntity.h
  3. 【功能模块和目的】 日志纪录功能实体类
  4. 【开发者及日期】 郑石诺 2015/01/06
  5. 【版本】 V1.0.0
  6. 【版权信息】 Copyright (C)2015 河南加一信息技术有限公司
  7. 【更改记录】
  8. *************************************************************************/
  9. #pragma once
  10. #include <thread>
  11. #include <memory>
  12. #include <mutex>
  13. #include <condition_variable>
  14. #include <list>
  15. #include<algorithm>
  16. #include <iostream>
  17. #include <atomic>
  18. #include "logger.h"
  19. using namespace std;
  20. /*************************************************************************
  21. 【类名】 CLoggerEntity
  22. 【功能】 日志记录
  23. 【接口说明】
  24. 【开发者及日期】 郑石诺 2015/01/06
  25. 【版本】 V1.0.0
  26. 【版权信息】 Copyright (C)2015 河南加一信息技术有限公司
  27. 【更改记录】
  28. *************************************************************************/
  29. class CLoggerEntity : public ILogger
  30. {
  31. SINGLETON_DECLARE(CLoggerEntity)
  32. private:
  33. typedef struct tagLOG_ITEM
  34. {
  35. LOG_CLASS Class;
  36. LOG_LEVEL Level;
  37. TCHAR Date[LOG_DATATIME_LEN];
  38. TCHAR Content[LOG_BUFFER_LENGTH];
  39. tagLOG_ITEM(LOG_CLASS a_Class, LOG_LEVEL a_Level, LPCTSTR a_Date, LPCTSTR a_Content) : Class(a_Class), Level(a_Level)
  40. {
  41. ASSERT(a_Date != NULL);
  42. lstrcpy(Date, a_Date);
  43. ASSERT(a_Content != NULL);
  44. lstrcpy(Content, a_Content);
  45. }
  46. } LOG_ITEM, *PLOG_ITEM;
  47. typedef std::list<PLOG_ITEM> ITEMLIST;
  48. public:
  49. virtual ~CLoggerEntity(void);
  50. virtual void init(CListCtrl* pList, LOG_DEV nDevType, LPCTSTR lpFilePath = NULL) override; // 初始化
  51. virtual void close(void)override; // 关闭
  52. virtual void start(void)override; // 开始显示日志
  53. virtual void stop(void)override; // 停止显示日志
  54. virtual void log(LOG_CLASS nClass, LOG_LEVEL nLevel, char* format, ...)override; // 显示日志
  55. virtual void filterShow(LOG_CLASS nClass = LOG_CLASS_GENERAL, LOG_LEVEL nLevel = LOG_LEVEL_NORMAL)override; // 日志过滤
  56. virtual BOOL isStart(void)override { return m_bIsLogger; }
  57. private:
  58. CLoggerEntity(void);
  59. // 记录日志信息线程函数
  60. void logThread(); // 线程函数(写文件)
  61. // 日志操作方法
  62. void __frameControl(); // 日志界面控制
  63. void __initConsoleWindow(void); // 打开控制台窗口
  64. FILE* __openLoggerFile(void); // 创建日志文件
  65. void __pushLog(LOG_CLASS nClass, LOG_LEVEL nLevel, LPCTSTR lpMessage);
  66. void __saveLog(PLOG_ITEM pItem, FILE* pFile); // 展示并保存日志
  67. void __flush(void);
  68. private:
  69. const static int FILE_MAX_SIZE = 5*1024*1024; // 文件最大长度限制
  70. const static int LOG_BUFFER_SIZE = 2048; // 日志缓冲大小
  71. //BOOL m_bStopLog; // 是否停止记录线程
  72. std::atomic<bool> m_bStopLog;
  73. BOOL m_bIsLogger; // 是否启用日志记录
  74. CListCtrl* m_pListCtrl; // 日志列表控件
  75. UINT m_nFilterClass; // 日志类型的过滤方式
  76. UINT m_nFilterLevel; // 日志级别的过滤方式
  77. CString m_arClass[4]; // 日志类型对应字符串值
  78. CString m_arLevel[5]; // 日志级别对应字符串值
  79. LOG_DEV m_nDevType; // 日志发起设备
  80. CString m_strLoggerName; // 根据设备得出日志名
  81. CString m_strFileDircet; // 写文件目录
  82. ITEMLIST m_ItemList; // 日志项缓冲区
  83. std::shared_ptr<std::thread> m_pThread;
  84. std::mutex m_mut; // 线程临界区对象
  85. std::atomic<int32_t> m_logBufferSize; // 当前日志缓存区数量
  86. std::condition_variable_any m_cond; // 条件变量
  87. int32_t m_pListCtrlCount; // 设置m_pListCtrl一共显示的行数
  88. };