C语言-日志打印

#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日志,打印级别可以放到配置文件中。

 

おすすめ

転載: blog.csdn.net/xiadeliang1111/article/details/112329422