mylog.h文件
#ifndef _MY_LOG_H_
#define _MY_LOG_H_
#define FILENAME "./debug.log"
extern int LogLevel[5];
void MY_LOG(const char *file, int line, int level, int status, const char *fmt, ...);
#endif
mylog.c文件
#define _CRT_SECURE_NO_WARNINGS
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdarg.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include "mylog.h"
#define MAX_STRING_LEN ( (1024) * (10) )
#define IC_NO_LOG_LEVEL 0
#define IC_DEBUG_LEVEL 1
#define IC_INFO_LEVEL 2
#define IC_WARNING_LEVEL 3
#define IC_ERROR_LEVEL 4
int LogLevel[5] = {IC_NO_LOG_LEVEL, IC_DEBUG_LEVEL, IC_INFO_LEVEL, IC_WARNING_LEVEL, IC_ERROR_LEVEL};
char ICLevelName[5][10] = {"NOLOG", "DEBUG", "INFO", "WARNING", "ERROR"};
static int MY_Error_GetCurTime(char* strTime)
{
struct tm* tmTime = NULL;
size_t timeLen = 0;
time_t tTime = 0;
tTime = time(NULL);
tmTime = localtime(&tTime);
timeLen = strftime(strTime, 33, "%Y.%m.%d %H:%M:%S", tmTime);
return timeLen;
}
static int MY_Error_OpenFile(int* pf)
{
char fileName[1024];
memset(fileName, 0, sizeof(fileName));
#ifdef WIN32
sprintf(fileName, "%s", FILENAME);
#else
sprintf(fileName, "%s", FILENAME);
#endif
*pf = open(fileName, O_WRONLY|O_CREAT|O_APPEND, 0666);
if(*pf < 0)
{
return -1;
}
return 0;
}
static void MY_Error_Core(const char *file, int line, int level, int status, const char *fmt, va_list args)
{
char str[MAX_STRING_LEN];
int strLen = 0;
char tmpStr[64];
int tmpStrLen = 0;
int pf = 0;
memset(str, 0, MAX_STRING_LEN);
memset(tmpStr, 0, sizeof(tmpStr));
tmpStrLen = MY_Error_GetCurTime(tmpStr);
tmpStrLen = sprintf(str, "[%s] ", tmpStr);
strLen = tmpStrLen;
tmpStrLen = sprintf(str+strLen, "[%s] ", ICLevelName[level]);
strLen += tmpStrLen;
if (status != 0)
{
tmpStrLen = sprintf(str+strLen, "[ERRNO is %d] ", status);
}
else
{
tmpStrLen = sprintf(str+strLen, "[SUCCESS] ");
}
strLen += tmpStrLen;
tmpStrLen = vsprintf(str+strLen, fmt, args);
strLen += tmpStrLen;
tmpStrLen = sprintf(str+strLen, " [%s]", file);
strLen += tmpStrLen;
tmpStrLen = sprintf(str+strLen, " [%d]\n", line);
strLen += tmpStrLen;
if(MY_Error_OpenFile(&pf))
{
return ;
}
write(pf, str, strLen);
close(pf);
return ;
}
void MY_LOG(const char *file, int line, int level, int status, const char *fmt, ...)
{
va_list args;
if(level == IC_NO_LOG_LEVEL)
{
return ;
}
va_start(args, fmt);
MY_Error_Core(file, line, level, status, fmt, args);
va_end(args);
return ;
}
main.c 测试文件
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mylog.h"
int main(void)
{
int a = 10;
MY_LOG(__FILE__, __LINE__, 4, -100, "debug = %d\n", a);
MY_LOG(__FILE__, __LINE__, 4, -1, "err = %d\n", 250);
return 0;
}
测试结果
可以在该文件的基础上做修改,改成自己的log文件打印。
#include <stdio.h>
#include <unistd.h>
#include <stdarg.h>
#if 0
#define err_log(errmsg,ret) \
do{ \
printf("----%s----%s----%d-----\n",__FILE__,__func__,__LINE__); \
perror(errmsg); \
return ret; \
}while(0)
#else
int err_log(int ret,char *format,...)
{
va_list args;
va_start(args, format);
vprintf(format, args);
va_end(args);
return ret;
}
#endif
int main(int argc, char const *argv[])
{
err_log(0,"%d====hello world...\n",20);
return 0;
}