zlog簡述: log是一個(gè)高性能、線程安全、靈活、概念清晰的純C日志函數(shù)庫。 事實(shí)上,在C的世界里面沒有特別好的日志函數(shù)庫(就像JAVA里面的的log4j,或者C++的log4cxx)。C程序員都喜歡用自己的輪子。printf就是個(gè)挺好的輪子,但沒辦法通過配置改變?nèi)罩镜母袷交蛘咻敵鑫募yslog是個(gè)系統(tǒng)級別的輪子,不過速度慢,而且功能比較單調(diào)。log4c異??拥ㄓ袃?nèi)存泄漏、效率低等等),而且已經(jīng)停止開發(fā) zlog有這些特性: * syslog分類模型,基于規(guī)則路由過濾,比log4j模型要正確高效,詳見為什么log4j的概念模型是錯誤的。 * 日志格式定制,類似于log4j的pattern layout * 多種輸出,包括動態(tài)文件、靜態(tài)文件、stdout、stderr、syslog、用戶自定義輸出函數(shù) * 運(yùn)行時(shí)手動或自動刷新配置(同時(shí)保證安全) * 高性能,在我的筆記本上達(dá)到338'638條日志每秒, 大概是syslog(3)配合rsyslogd的1000倍速度 * 高可靠性和速度之間的平衡,用戶自定義多少條日志后fsync數(shù)據(jù)到硬盤 * 用戶自定義等級 * 多線程和多進(jìn)程環(huán)境下保證安全轉(zhuǎn)檔 * 精確到微秒 * 簡單調(diào)用包裝dzlog(一個(gè)程序默認(rèn)只用一個(gè)分類) * MDC,線程鍵-值對的表,可以擴(kuò)展用戶自定義的字段 * 自診斷,可以在運(yùn)行時(shí)輸出zlog自己的日志和配置狀態(tài) * 不依賴其他庫,只要是個(gè)POSIX系統(tǒng)就成(當(dāng)然還要一個(gè)C99兼容的vsnprintf)
在http://hardysimpson./zlog/ 下載最新的zlog源碼包。 1. tar -zxvf zlog-1.2.12.tar.gz 解壓到當(dāng)前目錄。 2. 進(jìn)入zlog-1.2.12, 執(zhí)行make,在zlog-1.2.12/src/ 目錄下生成libzlog.a 靜態(tài)庫和libzlog.so動態(tài)庫。 3.編寫測試程序test.c 1 #include "zlog.h" 2 #include <stdio.h> 4 int main() 5 { 6 int rc; 7 zlog_category_t *zc; 8 rc = dzlog_init("./test.conf", "my_cat"); 9 if (rc) { 10 printf("init failed\n"); 11 zlog_fini(); 12 return -1; 13 } 14 int a = 10; 15 char str[112] = "12asfew"; 16 dzlog_info("hello, zlog %d, %s", a, str); 17 dzlog_debug("test aa"); 18 zlog_fini(); 19 return 0; 20 } 5. 編寫一個(gè)最簡單配置文件test.conf,通過配置文件來控制debug級別,風(fēng)格等。 1 [formats] 2 simple = "%m%n" 3 [rules] 4 my_cat.DEBUG >stdout;simple //將debug以上級別的信息輸出到 stdout中去,格式為simple類型格式
6.編寫Makefile, 文件目錄如下 ├── app 1 INCS = -I./zlog-1.2.12/src 2 CFLAGS = $(INCS) ./zlog-1.2.12/src/libzlog.a -lpthread 3 app:test.o 4 gcc -o app test.o $(CFLAGS) 5 test.o:test.c 6 gcc $(INCS) -c -o $@ $< 7 8 clean: 9 rm test.o app
7.執(zhí)行可執(zhí)行文件app ./app 結(jié)果如下: 2014-03-22 16:18:47 INFO [15456:test.c:16] hello, zlog 10, 12asfew |
|