这是一个简单、高效和轻量级C语言写的的日志系统,linux下不需要第三方库安装。目前主要是在linux下编写和测试,通用分支(这里)为一个基于Apache的APR(一个C语言跨平台的开源库)编写的跨平台版本,由于精力有限只基于最简单的日志打印功能进行了改写,仅供参考。
日志系统支持多线程多句柄、印级别控制、IO缓存设置、备份控制、日志文件大小控制、村欲情史异常退出堆栈打印、加密(AES-128)、压缩(lz4)和散列校验(MD5)。所有配置和接口都在log.h内。堆栈打印是接收所有异常退出信号时打印堆栈,输出文件名通过TRACE_PRINT_PATH宏控制,在其信号处理时还对所有日志句柄进行刷新处理,减少日志丢失可能。下面介绍下接口使用:
//max_file_bak:最大备份文件数量,备份文件名为输出文件名末尾+备份序号,如有其它需要可自行修改。
/*日志内容可以是任意类型,由format控制(类似printf函数的format)。日志等级设置为四个宏LOG_DEBUG、LOG_INFO、LOG_WARN和LOG_ERROR(如有需要更多细分可以很方便添加扩展),代码中低于此等级的打印不会生效,LOG_CLOSE为关闭日志功能,所有打印在编译期间过滤不影响效率。LOG_DEBUG会额外输出:时间 文件名【行号】线程号: ***(日志内容)。*/
//注意加密是在每条日志写入IO缓存前进行的,压缩是备份时整个文件进行压缩的,所以如果同时加密压缩,先解压再解密
//digest:输出为32个十六进制字符,如果digest为NULL,内部会自动申请内存,否则其size至少应为33(32加尾部\0)
所有具体使用有个简单测试例子在sample文件夹内,直接make就可以生成,详细可看代码,内部还有一个多线程安全时间计时器可以精确到纳秒,计数器个数可以由TIMEKEEPER_NUM这个宏控制,详细功能可以看这里。