当前位置: 编程技术>c/c++/嵌入式
C++日志记录类实例解析
来源: 互联网 发布时间:2014-10-26
本文导语: 本文所述实例是从一个Red Hat开源项目里面扒出来的,非常实用!读者还可以根据自身需求加以修改!完整源码如下: Log.h文件部分: #ifndef __LOG_H__ #define __LOG_H__ #include #include #include #include #include #include class CLog ...
本文所述实例是从一个Red Hat开源项目里面扒出来的,非常实用!读者还可以根据自身需求加以修改!完整源码如下:
Log.h文件部分:
#ifndef __LOG_H__ #define __LOG_H__ #include #include #include #include #include #include class CLog { public: ~CLog(); static CLog* get(TCHAR* path = NULL); void printf(const char* format, ...); private: CLog(FILE* handle); private: static CLog* _log; FILE* _handle; }; enum { LOG_DEBUG, LOG_INFO, LOG_WARN, LOG_ERROR, LOG_FATAL }; #ifdef _DEBUG static unsigned int log_level = LOG_DEBUG; #else static unsigned int log_level = LOG_INFO; #endif #define PRINT_LINE(type, format, datetime, ms, ...) printf("%lu::%s::%s,%.3d::%s::" format "n", GetCurrentThreadId(), type, datetime, ms, __FUNCTION__, ## __VA_ARGS__); #define LOG(type, format, ...) do { if (type >= log_level && type PRINT_LINE(type_as_char[type], format, datetime_str, now.millitm, ## __VA_ARGS__); } else { PRINT_LINE(type_as_char[type], format, datetime_str, now.millitm, ## __VA_ARGS__); } } } while(0) #define log_printf(format, ...) LOG(LOG_INFO, format, ## __VA_ARGS__) #define LOG_INFO(format, ...) LOG(LOG_INFO, format, ## __VA_ARGS__) #define LOG_WARN(format, ...) LOG(LOG_WARN, format, ## __VA_ARGS__) #define LOG_ERROR(format, ...) LOG(LOG_ERROR, format, ## __VA_ARGS__) #define DBGLEVEL 1000 #define DBG(level, format, ...) do { if (level LOG_ROLL_SIZE) { TCHAR roll_path[MAX_PATH]; sprintf(roll_path, "%s.1", path); if (!MoveFileEx(path, roll_path, MOVEFILE_REPLACE_EXISTING)) { return NULL; } } FILE* handle = fopen(path, "a+"); if (!handle) { return NULL; } _log = new CLog(handle); return _log; } void CLog::printf(const char* format, ...) { va_list args; va_start(args, format); vfprintf(_handle, format, args); va_end(args); fflush(_handle); }