#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 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; };