#ifndef __sys_logger_h_ #define __sys_logger_h_ #include #include #include #include #include #include //#include //#include //#include //#include //#define gettid() GetCurrentThreadId() #define gettid() 0 #define LEVEL_SOCKET_DEBUG 0 #define LEVEL_DEBUG 1 #define LEVEL_INFO 2 #define LEVEL_WARNING 3 #define LEVEL_ERROR 4 #define LOG_BUF_SIZE 2048 #define MAX_FILENAME_LEN 256 #define LOG_INFO_NOLOCK(format, ...) \ SysLogger::GetInstance()->WriteLogNoLock(LEVEL_INFO, \ __FILE__,__FUNCTION__, __LINE__, gettid(), \ format, ##__VA_ARGS__) #define SOCKET_DEBUG(format, ...) \ SysLogger::GetInstance()->WriteLog(LEVEL_SOCKET_DEBUG, \ __FILE__,__FUNCTION__, __LINE__, gettid(), \ format, ##__VA_ARGS__) #define LOG_DEBUG(format, ...) \ SysLogger::GetInstance()->WriteLog(LEVEL_DEBUG, \ __FILE__,__FUNCTION__, __LINE__, gettid(), \ format, ##__VA_ARGS__) #define LOG_INFO(format, ...) \ SysLogger::GetInstance()->WriteLog(LEVEL_INFO, \ __FILE__,__FUNCTION__, __LINE__, gettid(), \ format, ##__VA_ARGS__) #define LOG_WARNING(format, ...) \ SysLogger::GetInstance()->WriteLog(LEVEL_WARNING, \ __FILE__,__FUNCTION__, __LINE__, gettid(), \ format, ##__VA_ARGS__) #define LOG_ERROR(format, ...) \ SysLogger::GetInstance()->WriteLog(LEVEL_ERROR, \ __FILE__,__FUNCTION__, __LINE__, gettid(), \ format, ##__VA_ARGS__) class SysLogger { public: ~SysLogger(); static SysLogger* GetInstance(); static void DestroyInstance(); bool InitLogger(const char* file_name, int min_level); void WriteLog(int level, const char* exec_file, const char*func, int exec_line, int tid, const char* format, ...); void WriteLogNoLock(int level, const char* exec_file, const char*func, int exec_line, int tid, const char* format, ...); private: void set_log(int level, const char* exec_file, const char*func, int exec_line, int tid, const char* format, va_list valst); public: static SysLogger* instance_; private: SysLogger(); SysLogger(const SysLogger&){};//No copy int m_minLevel; char* m_logFileName; char* m_logBuf; FILE* m_fp; bool m_isStarted; std::mutex m_mutex; }; #endif