# 27log **Repository Path**: dhs347/27log ## Basic Information - **Project Name**: 27log - **Description**: 27log,日志管理系统,实用且非常实用。 - **Primary Language**: C - **License**: LGPL-2.1 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-10-28 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 27log帮助文档 适用于27log2.5 文档版本 1.0 For 27log 2.5 Manual Version:1.0 声明 27log遵循LGPL(GNU较宽松公共许可协议),所以使用27log的共享库版本的软件作者可以不必公开自己引用27log的共享库版本的程序的源代码。 当然,如果任何人修改了任何27log的源代码,他必须以LGPL授权许可协议才能将这个修改过后的产物发布。 请注意!笔者不是律师,这段文字只是对LGPL的一部分内容的简单描述(作者不保证这段文字的正确性,也不为此声明负任何责任),详细的信息,请咨询专业律师或阅读GNU官方对LGPL的说明(LGPL协议的原文已经包含在源代码包中,详见文件 LICENSE) 目录 1 27log简介 2 安装27log 3 函数/变量类型一览 3.1 变量 3.2 函数 4 宏一览 杂项 网络 数学 1 27log简介 27log是由27无垠工作室开发的C语言轻量级日志系统,可以简单的输出并在函数间传递日志信息。 其中27log使用简洁的语法编写,方便需要者进行修改(详见前部的”声明“一章) 27log的命名合理,可以有效避免出现命名重复的问题。 27log拥有非常小的出错几率,并且可以非常优雅的修正错误。 2 安装27log 您可以从gitee.com等下载到27log的源代码,src目录中包含27log.c与27log.h。您只需要将27log.c编译,产生27log.o,将其加入您的链接命令行,并在您的程序中引用27log.h即可 3 函数/变量类型一览 3.1 变量 logType_TYPE_TSLOG_:枚举类型,取值为 _MEMORY_LOG_:用于关于内存的日志; _IO_LOG_:用于关于输入输出的日志; _INTERNET_LOG_:用于关于互联网的日志; _DL_LOG_:用于关于共享库的日志; _DB_LOG_:用于关于数据库的日志; _CALC_LOG_:用于关于计算的日志; _OTHER_LOG_:用于其他类型的日志。 logType_TS:由日志结构体类型重定义的类型 3.2 函数 tsThrowLog() 原型 void tsThrowLog(logType_TS *log,logType_TYPE_TSLOG type,char *why ,char *info,void *functionAddr); logType_TS *log:一个logType_TS变量的地址,即一个日志结构体的地址,这个产生的日志要存放在哪个日志结构体里 logType_TYPE_TSLOG type:一个logType_TYPE_TSLOG类型的枚举,代表这个日志的类型 char *why:一个字符串(一个字符数组的地址),解释产生日志的原因 char *info:一个字符串(一个字符数组的地址),说明日志的情况 void *functionAddr:产生日志的函数的地址 描述:使用这个函数来抛出/产生(随你怎么叫吧,反正就是这个意思)一个日志信息并存放在地址为log的日志结构体中,并把这个结构体的状态设置为已缓存的. tsAutoPrintLog() 原型 void tsAutoPrintLog(logType_TS *log); logType_TS *log:一个logType_TS变量的地址,即一个日志结构体的地址. 描述:这个函数将一个已经产生的日志(即状态变量为已缓存的)写入到指定的文件中.这个文件可以由tsSetLogFile()函数设置,您可以使用tsPrintLogStdErr()函数直接将日志信息打印到默认的stderr文件流中(实际上,如果指定的文件打开失败,那么tsAutoPrintLog()的行为与tsPrintLogStdErr()的行为是相同的) tsNewLogCtrl() 原型 logType_TS *tsNewLogCtrl(void); 描述:使用这个函数获得一个崭新的并且可用的日志结构体的地址,如果不能达到这个目的,它将抛出/产生(还是那句老话,随你怎么叫了)并打印一个错误日志,同时返回NULL指针. tsSetLogFile() 原型 void tsSetLogFile(logType_TS *log,char *name); logType_TS log:一个指向要设置的日志结构体的指针 char *name:一个字符串,包含要设置为输出文件的文件名 描述:使用这个函数设置一个日志结构体的日志将在使用tsAutoPrintLog()函数时默认打印到的文件 tsPrintLogStdErr() 原型 void tsPrintLogStdErr(logType_TS *log); logType_TS *log:一个指向要打印的日志结构体的指针 描述:使用这个函数将一个日志结构体的信息打印到默认的stderr流 tsGetLogInfo() 原型 void tsGetLogInfo(logType_TS *log,logType_Type_TS *type ,char *why,char *info,void **function ,long long int *logTime); 所有参数(除logTime)与tsThrowLog()的参数意义基本相同 long long int *logTime:指向一个long long int变量的指针,这个指针将存放时间 描述:使用这个函数得到一个日志的信息(无论这个日志的状态是否是已缓存),如果一个参数的值为NULL,那么这个信息不会被写入 tsIsLogThrew() 原型: int tsIsLogThrew(logType_TS *log); logType_TS *log:一个指向要判断的结构体的指针 描述:使用这个函数以得到一个值,当log指向的日志结构体中包含的日志为已缓存状态时,返回非0值(真);否则,返回0值. tsFreeLogPtr() 原型 void tsFreeLogPtr(logType_TS *log); logType_TS *指向需要释放的结构体的指针 描述:使用这个函数释放一个日志结构体 4 宏一览 (我知道,很多人不喜欢"不安全"的宏,但宏能帮助我们做很多有必要的事情) 杂项宏 _tsGlobalLog_Using 一个无参宏,是一个公共的被预先声明的日志结构体,它不能被释放. TSFUNCTIONADDR_CAST(func) 将一个函数的地址转换为27log库中所有涉及函数地址的函数所需的地址. tsCheckPoint(log,point) 检查一个指针的正确性(是否为NULL),如果为NULL,那么产生/抛出(还是,随便你怎么想了)一个有关这个指针的日志并存放在指定的日志结构体中(log). tsCheckExpTrue(log,exp) 检查一个表达式的正确性,即若这个表达式的值为非零(逻辑真),那么产生/抛出(老生长谈了)一个有关这个表达式的日志并存放在指定的日志结构体中(log) tsCheckFileOpen(log,file) 检查一个文件指针的正确性,即若这个指针的值为NULL,那么产生/抛出(我不会再重复了)一个有关于这个文件指针的日志并存放在指定的日志结构体中(log) tsCheckPoint_Easy(point) 除了将日志存放在_tsGlobalLog_Using中之外,与tsCheckPoint无异 当__TSAUTOEXIT_EASYCLASS__宏定义于引用行之前被定义时,Easy类宏(即后缀为_Easy的宏)在条件不成立时会自动退出 网络宏 tsLog_Internet_Connect(log,ip)/tsLog_Internet_Disconnect(log,ip) 向log写入一条地址为ip的设备连接/关闭连接的信息 数学宏 tsCheckNaN(log,var) 当var的值为NaN时,产生一个有关与此变量为NaN(Not a Number)的日志 Warning:如果您使用此宏,请链接C语言的标准数学库