以前使用 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 ,欢迎同窗们来使用 ^_^