以前使用 log4c 或者 log4cpp 的時候, 總須要配置一些文件和連接庫之類複雜的配置。 雖然越複雜越說明這個軟件支持的功能多、可選擇性強, 可是對於一個小的項目,或者要研究他人的代碼而加點兒日誌的時候, 用這麼複雜的配置就不必了。git
因此我就想,要不寫個簡單一些的日誌庫, 這樣再用到不須要那麼複雜的日誌控制工具的時候, 就不用每次都配置環境,也不用寫配置文件什麼的了。 因此我就寫了個這個庫,由於過於簡單,代碼也很少, 也就不必作成lib庫,直接編譯到代碼裏就能夠了。github
下面從一個簡單的小例子來認識一下這個庫。函數
這個庫包含兩個文件,一個是 .c 文件,一個是 .h 文件, 在使用的時候直接和你的項目代碼編譯到一塊兒就能夠了。工具
假設項目的代碼結構以下:spa
ls easylog.c easylog.h main.c
項目的主要代碼在 main.c 文件裏面:日誌
cat main.c
#include <stdio.h> #include "easylog.h" int main(int argc, char* argv[]) { easylog("hello 個人"); return 0; }
編譯:code
gcc -o main main.c easylog.c
運行:blog
$ ./main $ ls easylog.c easylog.h main main.c main.log $ cat main.log hello 個人
上面的例子是最簡配置,也就是不增長任何的多餘信息, 在 easylog() 函數裏面寫什麼,就輸出什麼。 還要就是,在什麼都不設置的狀況下,會自動建立和執行的文件同樣的前綴的log文件。 得到這個文件名的方式是經過系統文件 "/proc/self/exe" 獲取的。get
要是我想換個其它的日誌文件名字呢,那就是 那就須要複雜一些的操做須要在代碼裏面增長一行代碼, 使用 easylog_file() 來制定日誌文件的名字。 例如咱們要把日誌放到文件test.log中, 那就能夠這麼寫:同步
修改項目文件,編譯執行,查看日誌文件:
$ cat main.c #include <stdio.h> #include "easylog.h" int main(int argc, char* argv[]) { easylog_file("test.log"); easylog("hello 個人"); return 0; } $ gcc -o main main.c easylog.c $ ./main $ ls easylog.c easylog.h main main.c main.log test.log $ cat test.log hello 個人
能夠看到,當前目錄下多了一個 test.log 文件,查看其中的內容,能夠看到就是咱們輸出的日誌。
但是我要是想獲取其它的信息呢,好比我想獲取時間信息。 那就得再加一行,easylog_flag_add(EASYLOG_DATE | EASYLOG_TIME) 這句代碼的意思是,在日誌中增長兩個屬性, EASYLOG_DATE 就是日期,EASYLOG_TIME 就是時間。
下面咱們修改一下咱們的項目文件 main.c,增長一行時間日期的設置代碼。
$ cat main.c #include <stdio.h> #include "easylog.h" int main(int argc, char* argv[]) { easylog_file("test.log"); easylog_flag_add(EASYLOG_DATE | EASYLOG_TIME); easylog("hello 個人"); return 0; }
編譯,運行,查看日誌:
$ gcc -o main main.c easylog.c $ ./main $ cat test.log hello 個人 2017-06-10 04:07:23.847 -- hello 個人
既然是爲了日誌,那就須要更詳細的信息,好比個人這個日誌是在哪一個文件哪一行寫下的呢, 爲了獲得這些信息,咱們能夠再加上一些設置,好比 EASYLOG_FILE、 EASYLOG_LINE、EASYLOG_FUNC,這三個分別是在日誌中記錄下這條日誌語句所在的 文件、文件行以及所在的函數名。
修改項目文件,編譯,運行,查看日誌:
$ cat main.c #include <stdio.h> #include "easylog.h" int main(int argc, char* argv[]) { easylog_file("test.log");//設置日誌文件名 easylog_flag_add(EASYLOG_DATE | //設置日誌須要的屬性 EASYLOG_TIME | EASYLOG_FILE | EASYLOG_LINE | EASYLOG_FUNC); easylog("hello 個人"); return 0; } $ gcc -o main main.c easylog.c $ ./main $ cat test.log hello 個人 2017-06-10 04:07:23.847 -- hello 個人 2017-06-10 04:20:38.438 main.c 11 main() -- hello 個人
從日誌文件也能夠看到,最後一行日誌顯示了日誌所在的文件,行數和函數名。 和它上面的兩行造成了鮮明的對比。
若是咱們在記錄到一半的時候,不想要某一個屬性了,怎麼辦呢? 那就移除某一個屬性,好比如今要移除日期屬性,那就加這麼一行: easylog_flag_rm(EASYLOG_DATE);
修改項目文件,編譯,運行,查看日誌:
$ cat main.c #include <stdio.h> #include "easylog.h" int main(int argc, char* argv[]) { easylog_file("test.log"); easylog_flag_add(EASYLOG_DATE | EASYLOG_TIME | EASYLOG_FILE | EASYLOG_LINE | EASYLOG_FUNC); easylog("hello 個人"); easylog_flag_rm(EASYLOG_DATE);//移除項目屬性 easylog("hello 你的"); return 0; } $ gcc -o main main.c easylog.c $ ./main $ cat test.log hello 個人 2017-06-10 04:37:28.094 -- hello 個人 2017-06-10 04:42:42.996 main.c 11 main() -- hello 個人 04:42:42.997 main.c 13 main() -- hello 你的
從最後的日誌中能夠看出,日誌的最後一行沒有記錄日期信息。
由於 easylog 的代碼自己不多,一共也就200多行, 因此能夠被使用者很容易的修改和使用。
最後,easylog 的代碼放在了github上,地址在這裏https://github.com/fengbohello/easylog ,歡迎同窗們來使用 ^_^