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