easylog -- Linux 下的簡單日誌庫

 

以前使用 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中, 那就能夠這麼寫:同步

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 ,歡迎同窗們來使用 ^_^


 

同步發表:https://www.fengbohello.top/archives/easylog

相關文章
相關標籤/搜索