zlog 純C日志函數庫的簡單使用方法


zlog簡述:

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)

 

http://hardysimpson.github.io/zlog/ 下載最新的zlog源碼包。

1. tar -zxvf zlog-1.2.12.tar.gz 解壓到當前目錄。

2. 進入zlog-1.2.12, 執行make,在zlog-1.2.12/src/ 目錄下生成libzlog.a 靜態庫和libzlog.so動態庫。

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. 編寫一個最簡單配置文件test.conf,通過配置文件來控制debug級別,風格等。

1 [formats]
2 simple  = "%m%n"
3 [rules]
4 my_cat.DEBUG >stdout;simple  //將debug以上級別的信息輸出到 stdout中去,格式為simple類型格式

 

 6.編寫Makefile, 文件目錄如下

├── app
├── Makefile
├── test.c
├── test.conf
├── test.o
├── zlog-1.2.12
└── zlog-1.2.12.tar.gz

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.執行可執行文件app    ./app 結果如下:

2014-03-22 16:18:47 INFO [15456:test.c:16] hello, zlog 10, 12asfew
2014-03-22 16:18:47 DEBUG [15456:test.c:17] test aa

 

8.常用打印格式  

[formats]
my = "%f:%L|%V: %m%n"
[rules]
my_cat.DEBUG >stdout;my

 

 打印結果:

ser.cpp:39|INFO: hello, zlog 10, 12asfew
ser.cpp:40|DEBUG: test aa

 

[formats]
my = "%d|%f|%L|%V| %m%n"
[rules]
my_cat.DEBUG >stdout;my

 

打印結果:

2014-03-22 18:02:07|ser.cpp|39|INFO| hello, zlog 10, 12asfew
2014-03-22 18:02:07|ser.cpp|40|DEBUG| test aa


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM