zlog是個概念清晰的日志函數庫,在效率、功能、安全性上大大超過了log4c,並且是用c寫成的,具有比較好的通用性
1.安裝
下載 https://github.com/downloads/HardySimpson/zlog/zlog-latest-stable.tar.gz
解壓, 安裝
$ tar -zxvf zlog-0.9.0.tar.gz $ cd zlog-0.9.0/ $ ./configure --enable-test # 把測試程序和案例也編譯下,反正不安裝 $ make $ sudo make install # 默認安裝在/usr/local/下,包括libzlog.so和zlog.h
2.介紹一下配置文件
zlog里面有三個重要的概念,category,format,rule
分類(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 (!my_cat) { 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 $ ./test_hello hello, zlog
5.高級功能
- syslog風格的配置文件,易學易用
- 可以靈活配置日志輸出的格式,類似於log4j的pattern layout
- 綱目分類模型,比log4j系列的繼承模型更加清晰
- 多種輸出,包括動態文件、靜態文件、stdout、stderr、syslog
- 可以在運行時動態刷新配置,只需要調用函數zlog_reload()
- 高性能,在我的筆記本上達到72'000條日志每秒, 大概是syslog(3)配合rsyslogd的200倍速度
- 用戶可以自定義等級,無需改變庫代碼
- 多線程和多進程寫同一個日志的情況下,安全轉檔(轉檔就是把太大的日志重命名)
- 可以精確到微秒
- 如果一個程序默認只用一個分類輸出,zlog提供了簡單的調用包裝dzlog
- MDC,一個log4j風格的鍵-值對的表,可以擴展用戶自定義的字段
- 自診斷,可以在運行時輸出zlog自己的日志和配置狀態
- 不依賴其他庫,只要是個POSIX系統就成
6.相關鏈接:
下載: https://github.com/downloads/HardySimpson/zlog/zlog-latest-stable.tar.gz上手指南: 在zlog-latest-stable.tar.gz的doc文件夾內, GettingStart-CN.txt GettingStart-EN.txt
使用攻略: 在zlog-latest-stable.tar.gz的doc文件夾內, UsersGuide-CN.pdf UsersGuide-EN.pdf
英文主頁: http://hardysimpson.github.com/zlog
中文主頁: http://www.oschina.net/p/zlog
作者博客: http://my.oschina.net/HardySimpson/blog
作者email: HardySimpson1984@gmail.com