主要用到c语言的_va_args__宏
参考:http://www.cplusplus.com/reference/cstdarg/va_list/
#ifndef __LOGGER_H
#define __LOGGER_H
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#ifndef LOG_TYPE
#define LOG_TYPE
//日志类型
enum LogType
{
InfoLog = 0, //信息
AlarmLog = 1, //告警
ErrLog = 2, //错误
DebugLog = 3 //调试
};
#endif
#define WRITELOG tempWriteLog
#define DEBUG_LOG(level, para, fmt, ...)do {\
if (level == DebugLog)WRITELOG(level,"%s " "["para"_DEBUG] " fmt" , %s:%d",__TIME__, ##__VA_ARGS__, __FUNCTION__, __LINE__); \
else WRITELOG(level, "[XQS_LOG]" fmt, ##__VA_ARGS__); \
}while(0)
#define XQS_LOG(level, para, fmt, ...)do {\
WRITELOG(level, "%s " "["para"] " fmt" , %s:%d",__TIME__, ##__VA_ARGS__, __FUNCTION__, __LINE__);\
}while(0)
inline void writeLogFile(const char* filename, const char* log)
{
FILE* stream = fopen("log.txt", "a");
if (NULL == stream) {
return;
}
fprintf(stream, "%s\n", log);
fclose(stream);
std::cout << "write file success!" << std::endl;
}
inline void tempWriteLog(int type, const char* format, ...)
{
char buf[512] = { 0 };
va_list ap;
va_start(ap, format);
vsprintf(buf, format, ap);
va_end(ap);
switch (type)
{
case InfoLog:
printf("提示: %s\n", buf);
break;
case AlarmLog:
printf("警告: %s\n", buf);
break;
case ErrLog:
printf("错误: %s\n", buf);
break;
case DebugLog:
printf("调试: %s\n", buf);
break;
default:
printf("未知错误: %s\n", buf);
break;
}
writeLogFile("log.txt", buf);
}
#endif