WnLog.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #pragma once
  2. // Author: Huangzhidan | great3779@sina.com
  3. // copyright: @Wind Information Co., Ltd (Wind Info) ShangHai
  4. // Create time: 2011-09-10
  5. // 一个跨平台的轻量级日志类。此类在于展示:
  6. // 1. 多线程写日志的思想。(写日志的动作不应对主程序产生较大影响)
  7. // 2. 展示了跨平台的线程安全、信号通知等机制
  8. // 3. 展示了一个高效的数据处理器
  9. // 4. 展示了回调机制的使用
  10. // 5. 展示了单例的使用
  11. // 6. 间接展示了模板类的使用
  12. // 注意事项:
  13. // 此日志类会自动按照日期对日志文件命名。
  14. // 例如:如果在SetLogPath接口传入的文件名为run.log, 则实际的log文件名形如 run20110910.log
  15. #ifdef LOG_EXPORTS
  16. #define LOG_API __declspec(dllexport)
  17. #else
  18. #define LOG_API __declspec(dllimport)
  19. #endif
  20. #include <string>
  21. enum LOG_LEVEL
  22. {
  23. NORMAL_LOG = 0, // "N"
  24. WARNNING_LOG, // "W"
  25. CRITICAL_LOG // "C"
  26. };
  27. typedef void (*LOG_CALLBACK_FUNC)(int status, std::string msg);
  28. class CLogDataHandler;
  29. class LOG_API CLog
  30. {
  31. public:
  32. friend class CLogDataHandler;
  33. public:
  34. static CLog& Instance();
  35. private:
  36. CLog();
  37. ~CLog();
  38. public:
  39. // 添加日志
  40. void AddLog(std::string strLog, LOG_LEVEL log_level = NORMAL_LOG);
  41. // 设置日志文件存放路径
  42. // pfunc为回调函数,用于展示Log内部状态
  43. void SetLogPath(const std::string& file_path, LOG_CALLBACK_FUNC pfunc = NULL);
  44. protected:
  45. // 数据处理器
  46. CLogDataHandler* m_ptr_data_handler;
  47. std::string m_file_path;
  48. bool m_bInit;
  49. LOG_CALLBACK_FUNC m_notify_function;
  50. };