日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言日志级别和作用,自己写的C语言通用日志框架,可以控制日志输出等级

發布時間:2025/4/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言日志级别和作用,自己写的C语言通用日志框架,可以控制日志输出等级 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/************************************c語言通用日志框架************************************ * * @author 南梔(kellygod) * * 定義顯示的日志級別 * #define LOG_LEVEL * 1. LOG_LEVEL_VERBOSE * 2. LOG_LEVEL_DEBUG * 3. LOG_LEVEL_INFO * 4. LOG_LEVEL_WARNING * 5. LOG_LEVEL_ERROR * 6. LOG_LEVEL_FATAL * 7. LOG_LEVEL_SILENT * function:(使用printf輸出格式帶換行符) * LOGV(format,...) * LOGD(format,...) * LOGI(format,...) * LOGW(format,...) * LOGE(format,...) * LOGF(format,...) * eg. LOGV("hellowrd"); * int a=1; * LOGE("a=%d",a); *****************************************************************************************/

#pragma once

#ifndef __LOG_PRINT_H_

#define __LOG_PRINT_H_

#include

#include

#include

#ifdef __cplusplus

extern "C"

{

#endif

/*控制日志輸出到控制臺或者文件,注釋此行日志輸出到控制臺*/

//#define DEBUG_FILE "log.dat"

/*改變此行控制日志輸出級別*/

#define LOG_LEVEL LOG_LEVEL_VERBOSE

#define LOG_LEVEL_VERBOSE 1 /*所有*/

#define LOG_LEVEL_DEBUG 2 /*調試*/

#define LOG_LEVEL_INFO 3 /*信息*/

#define LOG_LEVEL_WARNING 4 /*警告*/

#define LOG_LEVEL_ERROR 5 /*錯誤*/

#define LOG_LEVEL_FATAL 6 /*致命錯誤*/

#define LOG_LEVEL_SILENT 7 /*靜默*/

#define TITLE_VERBOSE " V:"

#define TITLE_DEBUG " D:"

#define TITLE_INFO " I:"

#define TITLE_WARNING " W:"

#define TITLE_ERROR " E:"

#define TITLE_FATAL " F:"

#ifndef LOG_LEVEL

# define LOG_LEVEL LOG_LEVEL_VERBOSE

#endif

#define LOG_NOOP (void) 0

#ifndef _FILE_POINTER_

#define _FILE_POINTER_

static FILE *fp_log;

#endif

#ifndef _TIME_POINTER_

#define _TIME_POINTER_

static time_t timep;

static struct tm *p;

#endif

#ifdef DEBUG_FILE

# define LOG_PRINT(level,fmt,...) \

fp_log=fopen(DEBUG_FILE,"a"); \

time(&timep); \

p =localtime(&timep); \

fprintf(fp_log,\

"%d-%d %d:%d:%d In %s Line:%u " level fmt "\n",\

1+p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec,\

__FILE__,__LINE__,##__VA_ARGS__); \

fclose(fp_log); \

fp_log=NULL

#else

# define LOG_PRINT(level,fmt,...) \

time(&timep); \

p =localtime(&timep); \

fprintf(stdout,\

"%d-%d %d:%d:%d In %s Line:%u " level fmt "\n",\

1+p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec,\

__FILE__,__LINE__,##__VA_ARGS__)

#endif

#if LOG_LEVEL_VERBOSE >= LOG_LEVEL

# define LOG_VERBOSE(fmt,...) LOG_PRINT(TITLE_VERBOSE,fmt,##__VA_ARGS__)

#else

# define LOG_VERBOSE(...) LOG_NOOP

#endif

#define LOGV(format,...) LOG_VERBOSE(format,##__VA_ARGS__)

#if LOG_LEVEL_DEBUG >= LOG_LEVEL

# define LOG_DEBUG(fmt,...) LOG_PRINT(TITLE_DEBUG,fmt,##__VA_ARGS__)

#else

# define LOG_DEBUG(...) LOG_NOOP

#endif

#define LOGD(format,...) LOG_DEBUG(format,##__VA_ARGS__)

#if LOG_LEVEL_INFO>= LOG_LEVEL

# define LOG_INFO(fmt,...) LOG_PRINT(TITLE_INFO,fmt,##__VA_ARGS__)

#else

# define LOG_INFO(...) LOG_NOOP

#endif

#define LOGI(format,...) LOG_INFO(format,##__VA_ARGS__)

#if LOG_LEVEL_WARNING >= LOG_LEVEL

# define LOG_WARN(fmt,...) LOG_PRINT(TITLE_WARNING,fmt,##__VA_ARGS__)

#else

# define LOG_WARN(...) LOG_NOOP

#endif

#define LOGW(format,...) LOG_WARN(format,##__VA_ARGS__)

#if LOG_LEVEL_ERROR >= LOG_LEVEL

# define LOG_ERROR(fmt,...) LOG_PRINT(TITLE_ERROR,fmt,##__VA_ARGS__)

#else

# define LOG_ERROR(...) LOG_NOOP

#endif

#define LOGE(format,...) LOG_ERROR(format,##__VA_ARGS__)

#if LOG_LEVEL_FATAL >= LOG_LEVEL

# define LOG_FATAL(fmt,...) LOG_PRINT(TITLE_FATAL,fmt,##__VA_ARGS__)

#else

# define LOG_FATAL(...) LOG_NOOP

#endif

#define LOGF(format,...) LOG_FATAL(format,##__VA_ARGS__)

#ifdef __cplusplus

}

#endif

#endif

總結

以上是生活随笔為你收集整理的C语言日志级别和作用,自己写的C语言通用日志框架,可以控制日志输出等级的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。