纯C日志函数库--zlog上手指南

难易 发布于 2012/03/29 16:18
阅读 3K+
收藏 10

zlog是个概念清晰的日志函数库,在效率、功能、安全性上大大超过了log4c,并且是用c写成的,具有比较好的通用性

1.安装

下载 HardySimpson-zlog-c7ae17b.zip

解压, 安装

1 $ unzip HardySimpson-zlog-c7ae17b.zip
2 cd HardySimpson-zlog-c7ae17b/
3 $ ./configure --enable-test # 把测试程序和案例也编译下,反正不安装
4 make
5 make install
6 # 默认安装在/usr/local/下,包括libzlog.so和zlog.h

把测试程序和案例也编译下,反正不安装

默认安装在/usr/local/下,包括libzlog.so和zlog.h

2.介绍一下配置文件

zlog里面有三个重要的概念,category,format,rule

分类(Category)用于区分不同的输入,代码中的分类变量的名字是一个字符串,在一个程序里面可以通过获取不同的分类名的category用来后面输出不同分类的日志,用于不同的目的。

格式(Format)是用来描述输出日志的格式,比如是否有带有时间戳, 是否包含文件位置信息等,上面的例子里面的格式simple就配置成简单的用户输入的信息+换行符。

规则(Rule)则是把分类、级别、输出文件、格式组合起来,决定一条代码中的日志是否输出,输出到哪里,以什么格式输出。简单而言,规则里面的分类字符串和代码里面的分类变量的名字一样就匹配,当然还有更高级的纲目分类匹配。规则彻底解耦了各个元素之间的强绑定,例如log4j就必须为每个分类指定一个级别(或者从父分类那里继承),这在多层系统需要每一层都有自己的级别要求的时候非常不方便。

现在试着写配置文件,配置文件名无所谓,放在哪里也无所谓,反正在zlog_init()的时候可以指定

1 cat /etc/zlog.conf
2 &simple                 "%m%n"
3  
4 my_cat.DEBUG            >stdout; simple

在目前的配置文件的例子里面,可以看到my_cat分类,>=debug等级的日志会被输出到stdout(标准输出),并且输出的格式是simple这个格式,也就是用户输入信息+换行符。如果要输出到文件并控制文件大小为1兆,规则的配置应该是

1 my_cat.DEBUG            "/var/log/aa.log", 1M; simple

3.在代码中使用

01 $ vi test_hello.c
02  
03 #include <stdio.h>
04  
05 #include "zlog.h"
06  
07 int main(int argc, char** argv)
08 {
09     int rc;
10     zlog_category_t *c;
11  
12     rc = zlog_init("/etc/zlog.conf");
13     if (rc) {
14         printf("init failed\n");
15         return -1;
16     }
17  
18     c = zlog_get_category("my_cat");
19     if (!my_cat) {
20         printf("get cat fail\n");
21         zlog_fini();
22         return -2;
23     }
24  
25     ZLOG_INFO(c, "hello, zlog");
26  
27     zlog_fini();
28  
29     return 0;
30 }



4.编译、然后运行!

1 $ cc -c -o test_hello.o test_hello.c -I/usr/local/include
2 $ cc -o test_hello test_hello.o -L/usr/local/lib -lzlog
3 $ ./test_hello
4 hello, zlog

5.高级功能

  • syslog风格的配置文件,易学易用
  • 可以灵活配置日志输出的格式,类似于log4j的pattern layout
  • 纲目分类模型,比log4j系列的继承模型更加清晰
  • 多种输出,包括动态文件、静态文件、stdout、stderr、syslog
  • 可以在运行时动态刷新配置,只需要调用函数zlog_update()
  • 高性能,在我的笔记本上达到72'000条日志每秒, 大概是syslog(3)配合rsyslogd的200倍速度
  • 用户可以自定义等级,无需改变库代码[sec:Define-new-level]
  • 多线程和多进程写同一个日志的情况下,安全转档(转档就是把太大的日志重命名)
  • 可以精确到微秒
  • 如果一个程序默认只用一个分类输出,zlog提供了简单的调用包装dzlog
  • MDC,一个log4j风格的键-值对的表,可以扩展用户自定义的字段
  • 自诊断,可以在运行时输出zlog自己的日志和配置状态
  • 不依赖其他库,只要是个POSIX系统就成

6.相关链接:

软件下载:(https://github.com/HardySimpson/zlog/zipball/master)

详细使用攻略:(https://github.com/HardySimpson/zlog/raw/master/download/ZlogUsersGuide-CN-0.9rc1.pdf)

主页:(https://github.com/HardySimpson/zlog)

作者博客:(http://my.oschina.net/HardySimpson/blog)

邮箱:(HardySimpson1984@gmail.com)

以下是话题补充:

@难易:修正过的步骤,上面写的有点问题。。。 http://my.oschina.net/HardySimpson/blog/51807 (2012/03/29 19:07)
加载中
1
中山野鬼
中山野鬼

引用来自“难易”的答案

引用来自“中山野鬼”的答案

下了。但在ubuntu下暂时没折腾起来。 楼主貌似和说明上,还少了一步

$sh autogen.sh

因为我解压后,没有configure 只有configure.au

另外autogen.sh我没安装 automake所以又折腾了一下。需要

sudo apt-get install autoconf automake libtool

但是现在还存在个问题。

make时,存在 Werror

但是实际cc时,确实存在warning .导致make输出。楼主能否把你的操作步骤贴一下,我看我还有什么地方疏忽了。谢谢。

 

不需要autogen.sh ,那是给重新生成configure用的

直接用上面描述的

3 $ ./configure --enable-test # 把测试程序和案例也编译下,反正不安装
4 make
5

make install

就行,make的时候报错是什么,能贴出来看下吗?

./configure --enable-test 我无法通过。说着不到文件,看到存在autogen.sh,根据README.markdown

就去下载了 https://github.com/HardySimpson/zlog/raw/master/download/ZlogUsersGuide-EN-0.9rc1.pdf

这个pdf中提示,需要

$sh autogen.sh

而且中间还有错,说找不到 README文件,解码后确实没有。我临时把README.markdown cp成README,由此cheat过去。但是make仍然存在Werror的情况。如下

rule.c:242:9: error: variable 'msg_len' set but not used [-Werror=unused-but-set-variable]
cc1: all warnings being treated as errors

麻烦帮忙看一下。

0
中山野鬼
中山野鬼

下了。但在ubuntu下暂时没折腾起来。 楼主貌似和说明上,还少了一步

$sh autogen.sh

因为我解压后,没有configure 只有configure.au

另外autogen.sh我没安装 automake所以又折腾了一下。需要

sudo apt-get install autoconf automake libtool

但是现在还存在个问题。

make时,存在 Werror

但是实际cc时,确实存在warning .导致make输出。楼主能否把你的操作步骤贴一下,我看我还有什么地方疏忽了。谢谢。

 

0
难易
难易

引用来自“中山野鬼”的答案

下了。但在ubuntu下暂时没折腾起来。 楼主貌似和说明上,还少了一步

$sh autogen.sh

因为我解压后,没有configure 只有configure.au

另外autogen.sh我没安装 automake所以又折腾了一下。需要

sudo apt-get install autoconf automake libtool

但是现在还存在个问题。

make时,存在 Werror

但是实际cc时,确实存在warning .导致make输出。楼主能否把你的操作步骤贴一下,我看我还有什么地方疏忽了。谢谢。

 

不需要autogen.sh ,那是给重新生成configure用的

直接用上面描述的

3 $ ./configure --enable-test # 把测试程序和案例也编译下,反正不安装
4 make
5

make install

就行,make的时候报错是什么,能贴出来看下吗?

0
难易
难易

引用来自“中山野鬼”的答案

引用来自“难易”的答案

引用来自“中山野鬼”的答案

下了。但在ubuntu下暂时没折腾起来。 楼主貌似和说明上,还少了一步

$sh autogen.sh

因为我解压后,没有configure 只有configure.au

另外autogen.sh我没安装 automake所以又折腾了一下。需要

sudo apt-get install autoconf automake libtool

但是现在还存在个问题。

make时,存在 Werror

但是实际cc时,确实存在warning .导致make输出。楼主能否把你的操作步骤贴一下,我看我还有什么地方疏忽了。谢谢。

 

不需要autogen.sh ,那是给重新生成configure用的

直接用上面描述的

3 $ ./configure --enable-test # 把测试程序和案例也编译下,反正不安装
4 make
5

make install

就行,make的时候报错是什么,能贴出来看下吗?

./configure --enable-test 我无法通过。说着不到文件,看到存在autogen.sh,根据README.markdown

就去下载了 https://github.com/HardySimpson/zlog/raw/master/download/ZlogUsersGuide-EN-0.9rc1.pdf

这个pdf中提示,需要

$sh autogen.sh

而且中间还有错,说找不到 README文件,解码后确实没有。我临时把README.markdown cp成README,由此cheat过去。但是make仍然存在Werror的情况。如下

rule.c:242:9: error: variable 'msg_len' set but not used [-Werror=unused-but-set-variable]
cc1: all warnings being treated as errors

麻烦帮忙看一下。

知道了,

第一条是gnu检查readme的问题,目前已经解决

第二条是gcc检查过于严格的问题,目前也已经解决

可以重新下载zip包,再运行autoge.sh,继续即可

0
难易
难易

不过目前有了新的问题,就是这个软件的tar包没地方可以放

顺便说一下,有中文使用手册的,在你下载的zip包的download里面也是有的

https://github.com/HardySimpson/zlog/raw/master/download/ZlogUsersGuide-CN-0.9rc1.pdf

0
中山野鬼
中山野鬼

引用来自“难易”的答案

不过目前有了新的问题,就是这个软件的tar包没地方可以放

顺便说一下,有中文使用手册的,在你下载的zip包的download里面也是有的

https://github.com/HardySimpson/zlog/raw/master/download/ZlogUsersGuide-CN-0.9rc1.pdf

tar 包没有地方放什么意思?你那成功安装好了吗 ?能否给个流程。谢谢。
0
难易
难易

引用来自“中山野鬼”的答案

引用来自“难易”的答案

不过目前有了新的问题,就是这个软件的tar包没地方可以放

顺便说一下,有中文使用手册的,在你下载的zip包的download里面也是有的

https://github.com/HardySimpson/zlog/raw/master/download/ZlogUsersGuide-CN-0.9rc1.pdf

tar 包没有地方放什么意思?你那成功安装好了吗 ?能否给个流程。谢谢。
这是最新的步骤~~~

下载 https://github.com/HardySimpson/zlog/raw/master/download/zlog-0.9.0.tar.gz

# 解压, 安装
$ tar -zxvf zlog-0.9.0.tar.gz
$ cd zlog-0.9.0/
$ ./configure --enable-test # 把测试程序和案例也编译下,反正不安装 
$ make
$ sudo make install
# 默认安装在/usr/local/下,包括libzlog.so和zlog.h
0
中山野鬼
中山野鬼
暂时无法下。不过估计和上面zip的展开文件是不一样的。
难易
难易
目前就不需要autogen.sh了,可以直接用./configure --enable-test来搞
0
难易
难易

引用来自“中山野鬼”的答案

暂时无法下。不过估计和上面zip的展开文件是不一样的。
刚才git push还没成功,现在好了可以下了
0
中山野鬼
中山野鬼

引用来自“难易”的答案

引用来自“中山野鬼”的答案

暂时无法下。不过估计和上面zip的展开文件是不一样的。
刚才git push还没成功,现在好了可以下了

OK。没问题了。目录下文件确实不对。另外我没用 sudo

我用了

$make prefix=/home/luckystar/zlog install

只是暂时看看。呵呵。

 

难易
难易
好阿,欢迎提出使用意见
返回顶部
顶部