一、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 (执行该命令使配置文件生效)

安装配置完成!

三、zlog的使用

1、配置文件

.conf

  • category(类别):程序里获取不同字符串变量来出书不同分类的日志;
  • format(格式):描述输出格式,是否带有时间戳,文件位置等;
  • rule(规则):将类别、级别、输出文件、格式组合起来的规则。
    例:
配置文件*.conf
配置文件具体内容如下:
[global]
#改变量可以不写,默认是true,如果使用设置为true时,Zlog就会严格检查所用格式和规则,否则,忽略所用格式和规则。
strict init = true
buffer min = 1024
buffer max = 2048
#转档指定锁文件,用于保证多进程下日志安全转档,使用默认的配置文件为锁文件。
#rotate lock file = zlog.lock
#日志访问权限,600 只允许当前用户访问
file perms = 600
[formats]
#使用默认日志输出格式  "%d %V [%p %F %L] %m%n" 输出日志格式为:%-5V按照日志级别按照左对齐
#2012-12-13 10:23:29 INFO [31668:test_hello.c:41] hello, zlog  
simple	= "%d.%-8.8us %-5V [%-8.8p.%-8.8t %F %L] %m%n"
#simple	= "%d.%ms %m%n"
#simple2	= "%d.%us %m%n"

[rules]
#优先级从低到高 debug info notice warn fatal  debug大于等于debug的优先级都能给通过debug输出。
my_cat.*		>stderr;
#当hello.txt文件大小大于10MB时,会将hello.txt->hello.txt.0 0代表不删除任何文件
my_cat.INFO		"hello.txt",10kb * 3 ~ "hello.txt.#r";simple
#my_cat.INFO		"hello.txt",1MB ~ "hello-%d(%Y%m%d).#2s.txt";simple
#my_cat.INFO		"hello.txt",1MB;simple
#my_cat.INFO		"hello.txt",1MB;simple
(1) 全局参数[global]

[]代表一个节的开始,四个小节的顺序不能变,依次为global-levels-formats-rules。这一节可以忽略不写。语法为
(key) = (value)
①strict init
在这里插入图片描述
②buffer min
③buffer max
在这里插入图片描述
④rotate lock file
锁文件,确保多线程程序在记录日志时引发的安全问题,默认为日志文件走作为锁。
⑥default format
在这里插入图片描述

(2)日志等级[levels]

用于定义用户自己的日志等级、这一节可以忽略不写。语法为:
(level string) = (level int), (syslog level, optional)
level int这个整数必须位于[1,253]之间,其他数字是非法的,数字越大越重要
在这里插入图片描述
意味着等级大于TRACE的会被写到标准输出

(3)格式[Formats]

在这里插入图片描述

(4)规则[Rules]

用于描述日志是怎么被过滤、格式化以及被输出的。这节可以若忽略不写,日志输没有输出,这也是配置文件中不可缺省的重要部分.
①级别匹配
zlog有6个默认的级别:“DEBUG”, “INFO”, “NOTICE”, “WARN”, “ERROR"和"FATAL”。就像其他的日志函数库那样, aa.DEBUG意味着任何大于等于DEBUG级别的日志会被输出。当然还有其他的表达式。配置文件中的级别是大小写不敏感的。

表达式含义
*所有等级
aa.debug代码内等级>=debug
aa.=debug代码内等级==debug
aa.!debug代码内等级!=debug

③分类匹配
分类必须由数字和字母组成,下划线"_"也算字母。

总结配置文件规则分类匹配的代码分类不匹配的代码分类
*匹配所有.aa, aa_bb, aa_cc, xx, yy …NONE
以_结尾的分类匹配本级及下级分类aa_.*aa, aa_bb, aa_cc, aa_bb_ccxx, yy
不以_结尾的精确匹配分类名aa.*aaaa_bb, aa_cc, aa_bb_cc
!匹配那些没有找到规则的分类!.*xxaa(as it matches rules above)

在这里插入图片描述
在这里插入图片描述

2、接口

zlog接口

int zlog_init(const char *confpath);

zlog_init()从配置文件confpath中读取配置信息到内存。如果confpath为NULL,会寻找环境变量ZLOG_CONF_PATH的值作为配置文件名。如果环境变量ZLOG_CONF_PATH也没有,所有日志以内置格式写到标准输出上。每个进程只有第一次调用zlog_init()是有效的,后面的多余调用都会失败并不做任何事情

int zlog_reload(const char *confpath);

zlog_reload()从confpath重载配置,并根据这个配置文件来重计算内部的分类规则匹配、重建每个线程的缓存、并设置原有的用户自定义输出函数。可以在配置文件发生改变后调用这个函数。这个函数使用次数不限。如果confpath为NULL,会重载上一次zlog_init()或者zlog_reload()使用的配置文件。如果zlog_reload()失败,上一次的配置依然有效。所以zlog_reload()具有原子性

void zlog_fini(void);

zlog_fini()清理所有zlog API申请的内存,关闭它们打开的文件。使用次数不限
返回值如果成功,zlog_init()和zlog_reload()返回0。失败的话,zlog_init()和zlog_reload()返回-1。详细错误会被写在由环境变量ZLOG_PROFILE_ERROR指定的错误日志里面。

3、日志级别

在这里插入图片描述
zlog使用手册:http://hardysimpson.github.io/zlog/UsersGuide-CN.html#htoc28

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐