C语言日志库zlog的简单配置及使用

以下所有内容均参考自:http://hardysimpson.github.io/zlog/UsersGuide-CN.html

一、zlog是什么?

zlog是一个高可靠性、高性能(笔记本上达到25万条日志每秒)、线程安全、灵活、概念清晰的纯C日志函数库。支持日志分级、切片、自定义格式等操作。

二、zlog的安装

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配置文件功能实现

简单日志打印
代码:

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)

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值