1. 程式人生 > >zlog 純C日誌函式庫的使用介紹

zlog 純C日誌函式庫的使用介紹

1.zlog簡述:

zlog是個概念清晰的日誌函式庫,在效率、功能、安全性上大大超過了log4c,並且是用c寫成的,具有比較好的通用性。

log是一個高效能、執行緒安全、靈活、概念清晰的純C日誌函式庫。

事實上,在C的世界裡面沒有特別好的日誌函式庫(就像JAVA裡面的的log4j,或者C++的log4cxx)。C程式設計師都喜歡用自己的輪子。printf就是個挺好的輪子,但沒辦法通過配置改變日誌的格式或者輸出檔案。syslog是個系統級別的輪子,不過速度慢,而且功能比較單調。log4c異常坑爹(有記憶體洩漏、效率低等等),而且已經停止開發 

zlog有這些特性:

 *  syslog分類模型,基於規則路由過濾,比log4j模型要正確高效,詳見

為什麼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