赞
踩
以下所有内容均参考自:http://hardysimpson.github.io/zlog/UsersGuide-CN.html
zlog是一个高可靠性、高性能(笔记本上达到25万条日志每秒)、线程安全、灵活、概念清晰的纯C日志函数库。支持日志分级、切片、自定义格式等操作。
1、#git clone https://github.com/HardySimpson/zlog.git //下载源码包
2、#cd zlog //进入工程目录
3、#make
4、#sudo make install
注:以上安装方法默认安装路径是/usr/local,也可以自定义安装路径,在zlog工程目录下输入以下命令:
# vim src/makefile
将50行的PREFIX?= /usr/local 改为自定义目录即可。
安装完zlog之后,为了让你的程序能找到zlog动态库,需执行以下命令:
# sudo vi /etc/ld.so.conf
将其内容置换为:
/usr/local/lib (根据实际安装目录灵活替换)
$ sudo ldconfig (执行该命令使配置文件生效)
安装配置完以后,简单测试一下:
1、写一个C文件:
$ vim test_hello.c #include <stdio.h> #include "zlog.h" int main(int argc, char** argv){ int rc; zlog_category_t *c; rc = zlog_init("test_hello.conf"); //指定配置文件路径 if (rc) { printf("init failed\n"); return -1; } c = zlog_get_category("my_cat"); if (!c) { printf("get cat fail\n"); zlog_fini(); //释放zlog return -2; } zlog_info(c, "hello, zlog"); zlog_fini(); return 0; }
2、写一个配置文件,放在和test_hello.c同样的目录下
$ vi test_hello.conf
[formats]
simple = "%m%n"
[rules]
my_cat.DEBUG >stdout; simpl
3、写makefile
$ cc -c -o test_hello.o test_hello.c -I/usr/local/include
$ cc -o test_hello test_hello.o -L/usr/local/lib -lzlog
4、执行
$ ./test_hello
hello, zlog
zlog有3个重要的概念:分类(Category)、规则(Rule)和格式(Format)。
分类(Category)用于区分不同的输入。代码中的分类变量的名字是一个字符串,在一个程序里面可以通过获取不同的分类名的category用来后面输出不同分类的日志,用于不同的目的。
格式(Format)是用来描述输出日志的格式,比如是否有带有时间戳,是否包含文件位置信息等,上面的例子里面的格式simple就是简单的用户输入的信息+换行符。
规则(Rule)则是把分类、级别、输出文件、格式组合起来,决定一条代码中的日志是否输出,输出到哪里,以什么格式输出。
所以,当程序执行下面的语句的时候
zlog_category_t *c;
c = zlog_get_category("my_cat");
zlog_info(c, "hello, zlog");
zlog会找到c的名字是"my_cat",对应的配置文件中的规则是
[rules] my_cat.DEBUG >stdout; simple
然后库会检查,目前这条日志的级别是否符合规则中的级别来决定是否输出。因为INFO>=DEBUG,所以这条日志会被输出。并且根据这条规则,会被输出到stdout(标准输出) ,输出的格式是simple,在配置文件中定义是
bash [formats] simple = “%m%n”
最后在屏幕上打印
hello, zlog
这就是整个过程。用户要做就是写自己的信息。日志往哪里输出,以什么格式输出,都是库和配置文件来完成的。
大部分的zlog的行为都取决于配置文件,比如把日志打到哪里去,用什么格式,怎么转档,都由配置文件来决定。
简单日志打印
代码:
zlog_category_t *c;
c = zlog_get_category("my_cat");
zlog_info(c, "hello, zlog");
配置文件
[formats] simple = “%m%n” [rules] my_cat.DEBUG >stdout; simple
打印结果:
如果在zlog的配置文件中有这么2行规则:
[rules] my_cat.DEBUG >stdout; simple my_cat.INFO >stdout;
打印结果:
日志过滤:
代码:
zlog_info(c, "info, zlog");
zlog_debug(c,"debug zlog");
规则:
[rules]
my_cat.INFO “./log/aa.log” (这里的aa.log和bb.log必须要存在,否则初始化失败)
my_cat.DEBUG “./log/bb.log”
即代码中调用的等级大于等于规则中的等级才会输出日志。
打印结果:
文件aa.log:
2020-01-02 18:20:46 INFO [31787:main.c:34] info, zlog
文件bb.log:
2020-01-02 18:20:46 INFO [31787:main.c:34] info, zlog
2020-01-02 18:20:46 DEBUG [31787:main.c:35] debug zlog
日志切片:
按文件大小切:
[rules]
my_cat.INFO "./log/mylog.log" ,1MB;(这里mylog.log不存在不会报错,可能是分片的原因)
结果:
1M一个文件,可以看到这里自动划分成好几个文件。
按时间切片:
[rules]
my_cat.INFO “./log/%c.%d(%F).log”; format
按时间切片直接利用命名结合转换字符就看可以完成。
日志输出格式:
通过配置文件可实现丰富的自定义格式输出。输出日志中可以包括时间、文件名、进程id、主机名、调用函数名、调用行号等。
日志等级:
“DEBUG”, “INFO”, “NOTICE”, “WARN”, "ERROR"和"FATAL"共6个等级。
API:
1、
int rc; zlog_category_t *zc; rc = zlog_init("test_category.conf"); //初始化 if (rc) { printf("init failed\n"); return -1; } zc = zlog_get_category("my_cat"); //创建分类 if (!zc) { printf("get cat fail\n"); zlog_fini(); return -2; } zlog_debug(zc, "hello, zlog - debug"); //按分类打印日志
2、
int rc;
rc = dzlog_init("test_default.conf", "my_cat"); //同时初始化和创建分类
if (rc) {
printf("init failed\n");
return -1;
}
dzlog_info("hello, zlog");//相应的调用函数也发生改变。
zlog_fini();
。。。。。。
更多内容详情见http://hardysimpson.github.io/zlog/UsersGuide-CN.html#htoc28
Chapter 6 zlog接口(API)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。