純C日志函數庫--zlog上手指南


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


免責聲明!

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



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