以下所有內容均參考自:
zlog是乙個高可靠性、高效能(筆記本上達到25萬條日誌每秒)、執行緒安全、靈活、概念清晰的純c日誌函式庫。支援日誌分級、切片、自定義格式等操作。
# vim src/makefile
將50行的prefix?= /usr/local 改為自定義目錄即可。
安裝完zlog之後,為了讓你的程式能找到zlog動態庫,需執行以下命令:
# sudo vi /etc/ld.so.conf
將其內容置換為:
/usr/local/lib (根據實際安裝目錄靈活替換)
$ sudo ldconfig (執行該命令使配置檔案生效)
安裝配置完以後,簡單測試一下:
1、寫乙個c檔案:
$ vim test_hello.c
#include
#include
"zlog.h"
intmain
(int argc,
char
** ar**)
c =zlog_get_category
("my_cat");
if(!c)zlog_info
(c,"hello, zlog");
zlog_fini()
;return0;
}
2、寫乙個配置檔案,放在和test_hello.c同樣的目錄下
$ vi test_hello.conf
[formats]
****** =
"%m%n"
[rules]
my_cat.debug >stdout; simpl
3、寫makefile
$ 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
4、執行
$ ./test_hello
hello, zlog
zlog有3個重要的概念:分類(category)、規則(rule)和格式(format)。
分類(category)用於區分不同的輸入。**中的分類變數的名字是乙個字串,在乙個程式裡面可以通過獲取不同的分類名的category用來後面輸出不同分類的日誌,用於不同的目的。
格式(format)是用來描述輸出日誌的格式,比如是否有帶有時間戳,是否包含檔案位置資訊等,上面的例子裡面的格式******就是簡單的使用者輸入的資訊+換行符。
規則(rule)則是把分類、級別、輸出檔案、格式組合起來,決定一條**中的日誌是否輸出,輸出到**,以什麼格式輸出。
所以,當程式執行下面的語句的時候
zlog_category_t *c;
c =zlog_get_category
("my_cat");
zlog_info
(c,"hello, zlog"
);
zlog會找到c的名字是"my_cat",對應的配置檔案中的規則是
[rules] my_cat.debug >stdout; ******然後庫會檢查,目前這條日誌的級別是否符合規則中的級別來決定是否輸出。因為info>=debug,所以這條日誌會被輸出。並且根據這條規則,會被輸出到stdout(標準輸出) ,輸出的格式是******,在配置檔案中定義是
bash [formats] ****** = 「%m%n」最後在螢幕上列印
hello, zlog
這就是整個過程。使用者要做就是寫自己的資訊。日誌往**輸出,以什麼格式輸出,都是庫和配置檔案來完成的。
大部分的zlog的行為都取決於配置檔案,比如把日誌打到**去,用什麼格式,怎麼轉檔,都由配置檔案來決定。
簡單日誌列印
**:
zlog_category_t *c;
c =zlog_get_category
("my_cat");
zlog_info
(c,"hello, zlog"
);
配置檔案
[formats] ****** = 「%m%n」 [rules] my_cat.debug >stdout; ******列印結果:
如果在zlog的配置檔案中有這麼2行規則:
[rules] my_cat.debug >stdout; ****** my_cat.info >stdout;列印結果:
日誌過濾:
**:
zlog_info
(c,"info, zlog");
zlog_debug
(c,"debug zlog"
);
規則:
[rules]
my_cat.info 「./log/aa.log」 (這裡的aa.log和bb.log必須要存在,否則初始化失敗)即**中呼叫的等級大於等於規則中的等級才會輸出日誌。my_cat.debug 「./log/bb.log」
列印結果:
檔案aa.log:
2020-01-02 18:20:46 info [31787:main.c:34] info, zlog
檔案bb.log:
2020-01-02 18:20:46 info [31787:main.c:34] info, zlog
2020-01-02 18:20:46 debug [31787:main.c:35] debug zlog
日誌切片:
按檔案大小切:
[rules]
my_cat.info "./log/mylog.log" ,1mb;(這裡mylog.log不存在不會報錯,可能是分片的原因)
結果:
1m乙個檔案,可以看到這裡自動劃分成好幾個檔案。
按時間切片:
[rules]
my_cat.info 「./log/%c.%d(%f).log」; format按時間切片直接利用命名結合轉換字元就看可以完成。
日誌輸出格式:
通過配置檔案可實現豐富的自定義格式輸出。輸出日誌中可以包括時間、檔名、程序id、主機名、呼叫函式名、呼叫行號等。
日誌等級:
「debug」, 「info」, 「notice」, 「warn」, "error"和"fatal"共6個等級。
api:
1、
int rc;
zlog_category_t *zc;
rc =
zlog_init
("test_category.conf");
//初始化
if(rc)
zc =
zlog_get_category
("my_cat");
//建立分類if(
!zc)
zlog_debug
(zc,
"hello, zlog - debug");
//按分類列印日誌
2、
int rc;
rc =
dzlog_init
("test_default.conf"
,"my_cat");
//同時初始化和建立分類
if(rc)
dzlog_info
("hello, zlog");
//相應的呼叫函式也發生改變。
zlog_fini()
;
chapter 6 zlog介面(api)
C 簡單的日誌類
簡單的日誌記錄類.日誌而已,何必那麼複雜!w.j.chang 2013.12.13 說明 easylog.h 1,簡單的單件實現 自動垃圾 2,使用方法 easylog inst log run.3,日誌記錄結果 run.2013.12.13 16 38 42 friday pragma once ...
C語言 動態庫簡單開發
動態庫專案 簡單的動態庫開發 報文傳送 define crt secure no warnings include include include 定義上下文結構體 typedef struct sck handlesck handle 初始化上下文 declspec dllexport int c...
最簡單跨平台的日誌庫
這裡是我之前最常用的日誌庫的 所有操作幾乎都是通過巨集實現。只需要修改 fprintf 的引數就可以很容易的重定向的不同的檔案或者終端。簡單易懂,全部是巨集的實現 跨平台,支援android,linux,macos,windows 易擴充套件,只需要簡單的封裝就可以日誌實現重定向 使用者友好,不同級...