jda/external/zlog-1.2.18/doc/GettingStart-CN.txt
2025-04-30 15:28:08 +08:00

112 lines
4.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

0. zlog是什么
zlog是一个高可靠性、高性能、线程安全、灵活、概念清晰的纯C日志函数库。
事实上在C的世界里面没有特别好的日志函数库就像JAVA里面的的log4j或者C++的log4cxx。C程序员都喜欢用自己的轮子。printf就是个挺好的轮子但没办法通过配置改变日志的格式或者输出文件。syslog是个系统级别的轮子不过速度慢而且功能比较单调。
所以我写了zlog。
zlog在效率、功能、安全性上大大超过了log4c并且是用c写成的具有比较好的通用性。
1.安装
下载https://github.com/HardySimpson/zlog/releases
$ tar -zxvf zlog-latest-stable.tar.gz
$ cd zlog-latest-stable/
$ make
$ sudo make install
or
$ make PREFIX=/usr/local/
$ sudo make PREFIX=/usr/local/ install
PREFIX指明了安装的路径安转完之后为了让你的程序能找到zlog动态库
$ sudo vi /etc/ld.so.conf
/usr/local/lib
$ sudo ldconfig
在你的程序运行之前保证libzlog.so在系统的动态链接库加载器可以找到的目录下。上面的命令适用于linux别的系统自己想办法。
2.介绍一下配置文件
zlog里面有三个重要的概念,category,formatrule
分类(Category)用于区分不同的输入代码中的分类变量的名字是一个字符串在一个程序里面可以通过获取不同的分类名的category用来后面输出不同分类的日志用于不同的目的。
格式(Format)是用来描述输出日志的格式,比如是否有带有时间戳, 是否包含文件位置信息等上面的例子里面的格式simple就配置成简单的用户输入的信息+换行符。
规则(Rule)则是把分类、级别、输出文件、格式组合起来决定一条代码中的日志是否输出输出到哪里以什么格式输出。简单而言规则里面的分类字符串和代码里面的分类变量的名字一样就匹配当然还有更高级的纲目分类匹配。规则彻底解耦了各个元素之间的强绑定例如log4j就必须为每个分类指定一个级别或者从父分类那里继承这在多层系统需要每一层都有自己的级别要求的时候非常不方便。
现在试着写配置文件配置文件名无所谓放在哪里也无所谓反正在zlog_init()的时候可以指定
$ cat /etc/zlog.conf
[formats]
simple = "%m%n"
[rules]
my_cat.DEBUG >stdout; simple
在目前的配置文件的例子里面可以看到my_cat分类>=debug等级的日志会被输出到stdout(标准输出)并且输出的格式是simple这个格式也就是用户输入信息+换行符。如果要输出到文件并控制文件大小为1兆规则的配置应该是
my_cat.DEBUG "/var/log/aa.log", 1M; simple
3.在代码中使用
$ vi test_hello.c
#include <stdio.h>
#include "zlog.h"
int main(int argc, char** argv)
{
int rc;
zlog_category_t *c;
rc = zlog_init("/etc/zlog.conf");
if (rc) {
printf("init failed\n");
return -1;
}
c = zlog_get_category("my_cat");
if (!c) {
printf("get cat fail\n");
zlog_fini();
return -2;
}
zlog_info(c, "hello, zlog");
zlog_fini();
return 0;
}
4.编译、然后运行!
$ 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 -lpthread
$ ./test_hello
hello, zlog
5.高级使用
* syslog分类模型比log4j模型更加直接了当
* 日志格式定制类似于log4j的pattern layout
* 多种输出包括动态文件、静态文件、stdout、stderr、syslog、用户自定义输出函数
* 运行时手动、自动刷新配置文件(同时保证安全)
* 高性能在我的笔记本上达到25万条日志每秒, 大概是syslog(3)配合rsyslogd的1000倍速度
* 用户自定义等级
* 多线程和多进程环境下保证安全转档
* 精确到微秒
* 简单调用包装dzlog一个程序默认只用一个分类
* MDC线程键-值对的表,可以扩展用户自定义的字段
* 自诊断可以在运行时输出zlog自己的日志和配置状态
* 不依赖其他库只要是个POSIX系统就成(当然还要一个C99兼容的vsnprintf)
6.相关链接
主页http://hardysimpson.github.com/zlog/
软件下载https://github.com/HardySimpson/zlog/releases
作者邮箱HardySimpson1984@gmail.com
auto tools版本: https://github.com/bmanojlovic/zlog
cmake版本: https://github.com/lisongmin/zlog
windows版本: https://github.com/lopsd07/WinZlog