#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdarg.h>
#define MINLEN 128
#define RET_ERROR 0
//当前打印级别,可通过配置文件进行获取
#define LOG_LEVEL 1
#define LOG_DEBUG 3
#define LOG_INFO 2
#define LOG_ERROR 1
const char LOGFILEDIR[MINLEN] = "/tmp/tmp";
/****************************************************************
* * function name : Log
* * functional description : 日志记录,可设置打印级别
* * input parameter : format:字符串格式
* * output parameter : None
* * return value: None
* * history :
* *****************************************************************/
void Log(int log_level, const char *log_file_name, const char* format, ...)
{
if (access(LOGFILEDIR, 0) == -1)
{
return;
}
FILE* pFile = fopen(log_file_name, "a");
va_list arg;
int done;
va_start(arg, format);
time_t time_log = time(NULL);
struct tm* tm_log = localtime(&time_log);
if(log_level <= LOG_LEVEL)
{
switch(log_level)
{
case LOG_DEBUG:
fprintf(pFile, "%04d-%02d-%02d %02d:%02d:%02d [DEBUG] ", tm_log->tm_year + 1900, tm_log->tm_mon + 1, tm_log->tm_mday, tm_log->tm_hour, tm_log->tm_min, tm_log->tm_sec);
done = vfprintf(pFile, format, arg);
break;
case LOG_INFO:
fprintf(pFile, "%04d-%02d-%02d %02d:%02d:%02d [INFO] ", tm_log->tm_year + 1900, tm_log->tm_mon + 1, tm_log->tm_mday, tm_log->tm_hour, tm_log->tm_min, tm_log->tm_sec);
done = vfprintf(pFile, format, arg);
break;
case LOG_ERROR:
fprintf(pFile, "%04d-%02d-%02d %02d:%02d:%02d [ERROR] ", tm_log->tm_year + 1900, tm_log->tm_mon + 1, tm_log->tm_mday, tm_log->tm_hour, tm_log->tm_min, tm_log->tm_sec);
done = vfprintf(pFile, format, arg);
break;
}
}
va_end(arg);
fflush(pFile);
fclose(pFile);
return;
}
int main()
{
char file_name[MINLEN] = "/tmp/tmp/test.log";
Log(LOG_INFO, file_name, "hello world:%s\n", "aaaa");
return 0;
}
先判断文件夹存不存在,存在的话再将需要记录的日志信息写入到指定文件中。
可设置不同级别的打印,这样就可以区分DEBUG日志与ERROR日志,打印级别可以放到配置文件中。