发布一个轻便易用、概念简单、高性能、跨平台、线程安全的纯c日志函数库iLOG3 ^_^

BetonArmEE BetonArmEE 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
iLOG3是一个轻便易用、概念简单,高性能、多层接口、原生跨平台、(规范使用时)线程安全的遵循LGPL开源协议的标准c日志函数库。

基本特性如下:
·原生跨平台,这意味着你的软件在日志层面上是可轻松移植的,目前支持WINDOWS & UNIX & Linux ,iLOG3会在不同的操作系统上做相应的实现和优化
·五类日志等级
·变参的日志函数和日志宏
·行日志风格方案选配
·输出介质有文件、标准输出、标准错误输出、syslogd或WINDOWS EVENT、自定义介质

高级特性如下:
·支持日志选项组合
·支持按日志文件大小、每天、每小时转档
·支持行日志风格自定义回调函数,很容易定制自己的行日志格式
·支持日志文件的打开、输出、关闭自定义回调函数,很容易扩展成日志输出到远程日志服务器落地
·线程安全、简易MDC、基于线程本地存储的缺省全局日志句柄

分层实施“日志句柄层(LOG)->日志句柄集合层(LOGS)->配置文件接口层(LOGCONF、LOGSCONF)”。其实大部分用户的日志需求很简单,一个进程写一个日志文件(使用日志句柄层函数即可),但也考虑到另外一些用户有多个输出对象需求(使用日志句柄集合层函数即可),还有用户喜欢用外部配置文件来配置日志(使用配置文件接口层函数即可),不同用户在不同项目场景中使用iLOG3的不同层接口,不至于杀鸡用牛刀、小刀砍大树。

我还开发了一个姐妹函数库iLOG3CONF_SML来支持用SML标记语言配置文件来配置日志句柄,有兴趣的朋友也可以调用日志句柄层或日志句柄集合层函数开发自己的iLOG3CONF_*,实现用XML或现在流行的json或自己项目统一配置文件格式,来实现用外部配置文件配置iLOG3日志句柄环境。

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


#include <stdio.h>

#include “LOG.h”

#define LOG_STYLES_HELLO ( LOG_STYLE_DATETIMEMS | LOG_STYLE_LOGLEVEL | LOG_STYLE_PID | LOG_STYLE_TID | LOG_STYLE_SOURCE | LOG_STYLE_FORMAT | LOG_STYLE_NEWLINE )

int test_hello()
{
char buffer[ 64 + 1 ] = "" ;
long buflen = sizeof(buffer)-1 ;

/* 创建日志句柄 */
if(CreateLogHandleG() == NULL )
{
printf( "创建日志句柄失败errno[%d]\n" , errno );
return -1;
}
else
{
printf( "创建日志句柄成功\n" );
}

/* 设置日志输出文件名 */
SetLogOutputG( LOG_OUTPUT_FILE , "test_hello.log" , LOG_NO_OUTPUTFUNC );
/* 设置当前日志过滤等级 */
SetLogLevelG( LOG_LEVEL_INFO );
/* 设置当前行日志风格方案 */
SetLogStylesG( LOG_STYLES_HELLO , LOG_NO_STYLEFUNC);

/* 以不同日志等级写行日志 */
DebugLogG( __FILE__ , __LINE__ , "hello iLOG3" ); /* 这行日志因等级不够,被华丽的过滤了 */
InfoLogG( __FILE__ , __LINE__ , "hello iLOG3" );
WarnLogG( __FILE__ , __LINE__ , "hello iLOG3" );
ErrorLogG( __FILE__ , __LINE__ , "hello iLOG3" );
FatalLogG( __FILE__ , __LINE__ , "hello iLOG3" );

/* 以不同日志等级写十六进制块日志 */
DebugHexLogG( __FILE__ , __LINE__ , buffer , buflen , "缓冲区[%ld]" , buflen ); /* 又一个被华丽的过滤 */
InfoHexLogG( __FILE__ , __LINE__ , buffer , buflen , "缓冲区[%ld]" , buflen );
WarnHexLogG( __FILE__ , __LINE__ , buffer , buflen , "缓冲区[%ld]" , buflen );
ErrorHexLogG( __FILE__ , __LINE__ , buffer , buflen , "缓冲区[%ld]" , buflen );
FatalHexLogG( __FILE__ , __LINE__ , buffer , buflen , "缓冲区[%ld]" , buflen );

/* 销毁日志句柄 */
DestroyLogHandleG();
printf( "释放日志句柄\n" );

return 0;
}

int main()
{
return -test_hello();
}

输出日志如下:

2014-02-09 20:06:39.203000 | INFO | 3880:700:test_20060920.c:32 | hello iLOG3
2014-02-09 20:06:39.203000 | WARN | 3880:700:test_20060920.c:33 | hello iLOG3
2014-02-09 20:06:39.203000 | ERROR | 3880:700:test_20060920.c:34 | hello iLOG3
2014-02-09 20:06:39.203000 | FATAL | 3880:700:test_20060920.c:35 | hello iLOG3
2014-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 0123456789ABCDEF
0x00000000 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 0123456789ABCDEF
0x00000000 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 0123456789ABCDEF
0x00000000 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 0123456789ABCDEF
0x00000000 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 ................


下载页面
http://git.oschina.net/calvinwilliams/iLOG3
欢迎使用,多提宝贵意见 ^_^
...全文
评论 3
收藏 已收藏
分享
返回顶部
BetonArmEE
非技术区 15,445 成员 58,111 内容