打印

[日志库]zlog--纯C日志库

[复制链接]
2006|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keer_zu|  楼主 | 2014-12-30 11:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
纯C日志函数库--zlog
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系统就成

相关帖子

沙发
keer_zu|  楼主 | 2014-12-30 14:13 | 只看该作者
tracert

使用特权

评论回复
板凳
keer_zu|  楼主 | 2014-12-30 15:18 | 只看该作者
yyy71cj 发表于 2014-12-30 14:05
弱弱地问一句:花这么大经历搞日志,目的是要做什么?

调试方便

使用特权

评论回复
地板
keer_zu|  楼主 | 2014-12-30 15:19 | 只看该作者
yyy71cj 发表于 2014-12-30 14:05
弱弱地问一句:花这么大经历搞日志,目的是要做什么?

当然,投入使用时,出问题好定位。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1349

主题

12425

帖子

53

粉丝