当前位置: 编程技术>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);
}