zlog 純C日誌函式庫的使用介紹
1.zlog簡述:
zlog是個概念清晰的日誌函式庫,在效率、功能、安全性上大大超過了log4c,並且是用c寫成的,具有比較好的通用性。
log是一個高效能、執行緒安全、靈活、概念清晰的純C日誌函式庫。
事實上,在C的世界裡面沒有特別好的日誌函式庫(就像JAVA裡面的的log4j,或者C++的log4cxx)。C程式設計師都喜歡用自己的輪子。printf就是個挺好的輪子,但沒辦法通過配置改變日誌的格式或者輸出檔案。syslog是個系統級別的輪子,不過速度慢,而且功能比較單調。log4c異常坑爹(有記憶體洩漏、效率低等等),而且已經停止開發
zlog有這些特性:
* syslog分類模型,基於規則路由過濾,比log4j模型要正確高效,詳見
* 日誌格式定製,類似於log4j的pattern layout
* 多種輸出,包括動態檔案、靜態檔案、stdout、stderr、syslog、使用者自定義輸出函式
* 執行時手動或自動重新整理配置(同時保證安全)
* 高效能,在我的筆記本上達到338'638條日誌每秒, 大概是syslog(3)配合rsyslogd的1000倍速度
* 高可靠性和速度之間的平衡,使用者自定義多少條日誌後fsync資料到硬碟
* 使用者自定義等級
* 多執行緒和多程序環境下保證安全轉檔
* 精確到微秒
* 簡單呼叫包裝dzlog(一個程式預設只用一個分類)
* MDC,執行緒鍵-值對的表,可以擴充套件使用者自定義的欄位
* 自診斷,可以在執行時輸出zlog自己的日誌和配置狀態
* 不依賴其他庫,只要是個POSIX系統就成(當然還要一個C99相容的vsnprintf)
2.使用
先下載:https://github.com/downloads/HardySimpson/zlog/zlog-latest-stable.tar.gz
解壓安裝:
zlog-latest-stable.tar.gz
$ tar -zxvf zlog-latest-stable.tar.gz
$ cd zlog-latest-stable/
$ make
$ sudo make install
or
$ sudo make PREFIX=/usr/local/ install
$ sudo vi /etc/ld.so.conf
/usr/local/lib
$ sudo ldconfig
#配置檔案
$ cat /etc/zlog.conf
[formats]
simple = "%f:%L|%V: %m%n"
[rules]
my_cat.DEBUG >stdout; simple
3.示例
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;
}
makefile
INCS = -I/usr/local/include
CFLAGS = $(INCS) -L/usr/local/lib -lzlog -lpthread
test_hello:test_hello.o
gcc -o test_hello test_hello.o $(CFLAGS)
test_hello.o:test_hello.c
gcc $(INCS) -c -o [email protected] $<
clean:
rm test_hello.o test_hello
編譯:
make
執行:
./test_hello
test_hello.c:23|INFO: hello, zlog