iLOG3 纯C日志函数库开源项目

我要开发同款
匿名用户2014年02月09日
46阅读
开发技术C/C++
所属分类程序开发、日志工具(Logging)
授权协议LGPL

作品详情

iLOG3是一个轻便易用、概念简单,高性能、多层接口、原生跨平台、(规范使用时)线程安全的遵循LGPL开源协议的标准C日志函数库。基本特性如下:

原生跨平台,这意味着你的软件在日志层面上是可轻松移植的,目前支持WINDOWS&UNIX&Linux,iLOG3会在不同的操作系统上做相应的实现和优化

五类日志等级

变参的日志函数和日志宏

行日志风格方案选配

输出介质有文件、标准输出、标准错误输出、syslogd或WINDOWSEVENT、自定义介质

高级特性如下:

支持日志选项组合

支持按日志文件大小、每天、每小时转档

支持行日志风格自定义回调函数,很容易定制自己的行日志格式

支持日志文件的打开、输出、关闭自定义回调函数,很容易扩展成日志输出到远程日志服务器落地

线程安全、简易MDC、基于线程本地存储的缺省全局日志句柄

分层实施“日志句柄层(LOG)->日志句柄集合层(LOGS)->配置文件接口层(LOGCONF、LOGSCONF)”。其实大部分用户的日志需求很简单,一个进程写一个日志文件(使用日志句柄层函数即可),但也考虑到另外一些用户有多个输出对象需求(使用日志句柄集合层函数即可),还有用户喜欢用外部配置文件来配置日志(使用配置文件接口层函数即可),不同用户在不同项目场景中使用iLOG3的不同层接口,不至于杀鸡用牛刀、小刀砍大树。我还开发了一个姐妹函数库iLOG3CONF_SML来支持用SML标记语言配置文件来配置日志句柄,有兴趣的朋友也可以调用日志句柄层或日志句柄集合层函数开发自己的iLOG3CONF_*,实现用XML或现在流行的json或自己项目统一配置文件格式,来实现用外部配置文件配置iLOG3日志句柄环境。

此外,源代码结构也比较简单,只有三对源文件,便于搬运、嵌入和修改。

使用代码示例:

#include<stdio.h>#include"LOG.h"#defineLOG_STYLES_HELLO(LOG_STYLE_DATETIMEMS|LOG_STYLE_LOGLEVEL|LOG_STYLE_PID|LOG_STYLE_TID|LOG_STYLE_SOURCE|LOG_STYLE_FORMAT|LOG_STYLE_NEWLINE)inttest_hello(){charbuffer[64+1]="";longbuflen=sizeof(buffer)-1;/*创建日志句柄*/if(CreateLogHandleG()==NULL){printf("创建日志句柄失败errno[%d]\n",errno);return-1;}else{printf("创建日志句柄成功\n");}/*设置日志输出文件名*/SetLogOutputG(LOG_OUTPUT_FILE,"test_iLOG3.log",LOG_NO_OUTPUTFUNC);/*设置当前日志过滤等级*/SetLogLevelG(LOG_LEVEL_INFO);/*设置当前行日志风格方案*/SetLogStylesG(LOG_STYLES_HELLO,LOG_NO_STYLEFUNC);/*以不同日志等级写行日志*/DEBUGLOGG("helloDEBUG");/*这行日志因等级不够,被华丽的过滤了*/INFOLOGG("helloINFO");WARNLOGG("helloWARN");ERRORLOGG("helloERROR");FATALLOGG("helloFATAL");/*以不同日志等级写十六进制块日志*/DEBUGHEXLOGG(buffer,buflen,"helloDEBUGbuffer[%ld]",buflen);/*又一个被华丽的过滤*/INFOHEXLOGG(buffer,buflen,"helloINFObuffer[%ld]",buflen);WARNHEXLOGG(buffer,buflen,"helloWARNbuffer[%ld]",buflen);ERRORHEXLOGG(buffer,buflen,"helloERRORbuffer[%ld]",buflen);FATALHEXLOGG(buffer,buflen,"helloFATALbuffer[%ld]",buflen);/*销毁日志句柄*/DestroyLogHandleG();printf("释放日志句柄\n");return0;}intmain(){return-test_hello();}输出日志如下:2014-02-09 20:06:39.203000 | INFO  | 3880:700:test_20060920.c:32 | helloINFO2014-02-09 20:06:39.203000 | WARN  | 3880:700:test_20060920.c:33 | helloWARN2014-02-09 20:06:39.203000 | ERROR | 3880:700:test_20060920.c:34 | helloERROR2014-02-09 20:06:39.203000 | FATAL | 3880:700:test_20060920.c:35 | helloFATAL2014-02-09 20:06:39.203000 | INFO  | 3880:700:test_20060920.c:39 | 缓冲区[64]             0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F    0123456789ABCDEF0x00000000   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................0x00000010   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................0x00000020   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................0x00000030   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................2014-02-09 20:06:39.203000 | WARN  | 3880:700:test_20060920.c:40 | 缓冲区[64]             0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F    0123456789ABCDEF0x00000000   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................0x00000010   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................0x00000020   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................0x00000030   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................2014-02-09 20:06:39.203000 | ERROR | 3880:700:test_20060920.c:41 | 缓冲区[64]             0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F    0123456789ABCDEF0x00000000   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................0x00000010   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................0x00000020   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................0x00000030   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................2014-02-09 20:06:39.203000 | FATAL | 3880:700:test_20060920.c:42 | 缓冲区[64]             0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F    0123456789ABCDEF0x00000000   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................0x00000010   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................0x00000020   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................0x00000030   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

------------------------------------------------------------压测硬件(2007年买的老爷机)   CPU :IntelDualE21601.8GHz1.81GHz   内存:2GB   硬盘:希捷250GB7200转压测软件   WindowsXPSP3(VMware6.0(RedHatEnterpriseLinux5.4分了256MB内存))压测场景   10个进程,每个进程开10个线程,每个线程写10000条日志   每行日志格式大致是”日期时间|PID:TID:源代码文件名:源行号|loglog”压测命令   $time./test_press_mpt101010000;wc*.log*开压!real   0m13.922suser   0m1.676ssys    0m12.211s 124671  997368 9100983test_press_mpt.log 148650 118920010851450test_press_mpt.log.1 143668 114934410487764test_press_mpt.log.2 143657 114925610486961test_press_mpt.log.3 150482 120385610985186test_press_mpt.log.4 143699 114959210490027test_press_mpt.log.5 145173 116138410597629test_press_mpt.log.61000000 800000073000000total另外,在公司的PCSERVER也跑过,速度提高到real6s左右------------------------------------------------------------

源代码包中doc目录包含文档,文档目录如下《iLOG3日志函数库用户指南.doc》目录索引1   前言   52   概述   53   编译安装   63.1   依赖库   63.2   用自带makefile或VC6工程文件编译安装   73.3   自己手动编译安装   94   基本使用   104.1   一点点概念   104.2   第一个示例   104.3   行日志风格方案选配   135   高级特性   145.1   设置日志选项   145.2   日志文件转档   145.3   自定义行日志风格   155.4   自定义日志输出类型   165.5   自定义日志的打开、输出、关闭   165.6   线程安全   185.6.1   MDC   185.6.2   基于线程本地存储的缺省全局日志句柄   195.7   一个常用示例   206   日志句柄集合层   217   配置文件接口层   247.1   自带的简单配置文件接口层   247.2   配置文件接口展望   268   源码分析   278.1   第一条线:日志句柄的创建销毁   288.2   第二条线:日志句柄的环境设置   298.3   第三条线:写日志   379   同类日志函数库比较   419.1   性能比较   419.2   功能比较   4510   源代码包结构   47《iLOG3日志函数库参考手册.doc》目录索引1   宏   61.1   错误码宏   61.2   日志输出类型宏   61.3   日志等级宏   61.4   行日志风格组合宏   71.5   日志选项组合宏   81.6   日志转档模式宏   82   日志句柄函数   92.1   管理日志句柄   92.1.1   创建日志句柄   92.1.2   销毁日志句柄   92.2   句柄环境设置   92.2.1   设置日志输出   92.2.2   设置当前日志过滤等级   102.2.3   设置行日志风格方案   102.3   高级句柄环境设置   112.3.1   设置日志句柄选项   112.3.2   设置自定义标签   112.3.3   设置日志转档模式   112.3.4   设置日志文件转档大小   122.3.5   设置日志文件转档大小的压迫系数   122.3.6   设置行日志缓冲区大小   122.3.7   设置十六进制块日志缓冲区大小   132.4   行日志输出   132.4.1   带日志等级的写行日志   132.4.2   写调试行日志   142.4.3   写普通信息行日志   142.4.4   写警告行日志   142.4.5   写错误行日志   152.4.6   写严重错误行日志   152.5   十六进制块日志输出   162.5.1   带日志等级的写十六进制块日志   162.5.2   写十六进制块调试日志   162.5.3   写十六进制普通信息块日志   172.5.4   写十六进制块警告日志   172.5.5   写十六进制块错误日志   182.5.6   写十六进制块严重错误日志   183   日志句柄集合函数   193.1   管理日志句柄集合   193.1.1   创建日志句柄集合   193.1.2   销毁日志句柄集合   193.2   管理日志句柄集合中的日志句柄   193.2.1   压入一个日志句柄到日志句柄集合中   193.2.2   从一个日志句柄集合中弹出一个指定标识的日志句柄   203.2.3   从一个日志句柄集合中查询一个指定标识的日志句柄   203.2.4   遍历一个日志句柄集合中所有日志句柄   204   配置文件接口层函数   214.1   日志句柄   214.1.1   从配置文件构建日志句柄   214.2   日志句柄集合   214.2.1   从配置文件构建日志句柄集合   215   配置辅助函数   225.1   属性转换函数   225.1.1   日志输出类型(字符串转换为整型)   225.1.2   日志等级类型(字符串转换为整型)   225.1.3   日志等级类型(整型转换为字符串)   225.1.4   行日志风格(字符串转换为整型)   235.1.5   日志选项(字符串转换为整型)   235.1.6   日志转档模式(字符串转换为整型)   235.1.7   日志缓冲区(字符串转换为整型)   246   简单配置文件属性列表   24

------------------------------------------------------------欢迎使用,如果你碰到了使用问题或者有更酷的想法请告诉我,谢谢^_^

首页传送门

https://git.oschina.net/calvinwilliams/iLOG3

技术博客

《开源纯C日志函数库iLOG3快速入门(一、基本使用速览).txt》

https://my.oschina.net/u/988092/blog/198377

《开源纯C日志函数库iLOG3快速入门(二、定制远程日志服务).txt》

https://my.oschina.net/u/988092/blog/199698

《开源纯C日志函数库iLOG3快速入门(三、日志过滤和转档后压缩)》

https://my.oschina.net/u/988092/blog/200005

《开源纯C日志函数库iLOG3快速入门(四、使用合适的日志输出函数或宏)》

https://my.oschina.net/u/988092/blog/200013

《开源纯C日志函数库iLOG3快速入门(五、与随手写的简单写日志函数的比较)》

https://my.oschina.net/u/988092/blog/202240https://

《开源纯C日志函数库iLOG3快速入门(六、日志配置文件)》

https://my.oschina.net/u/988092/blog/203743

《开源纯C日志函数库iLOG3快速入门(七、一份配置应用于多个日志文件)》

https://my.oschina.net/u/988092/blog/265787

《开源纯C日志函数库iLOG3快速入门(八、如果你喜欢简单日志函数甚于日志函数库)》

https://my.oschina.net/u/988092/blog/293142

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论