easylog -- Linux 下的简单日志库
之前使用 log4c 或者 log4cpp 的时候, 总需要配置一些文件和链接库之类复杂的配置。 虽然越复杂越说明这个软件支持的功能多、可选择性强, 但是对于一个小的项目,或者要研究他人的代码而加点儿日志的时候, 用这么复杂的配置就没必要了。
所以我就想,要不写个简单一些的日志库, 这样再用到不需要那么复杂的日志控制工具的时候, 就不用每次都配置环境,也不用写配置文件什么的了。 所以我就写了个这个库,因为过于简单,代码也不多, 也就没必要做成lib库,直接编译到代码里就可以了。
下面从一个简单的小例子来认识一下这个库。
这个库包含两个文件,一个是 .c 文件,一个是 .h 文件, 在使用的时候直接和你的项目代码编译到一起就可以了。
假设项目的代码结构如下:
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 ;
}
编译:
gcc -o main main.c easylog.c
运行:
$ ./main
$ ls easylog.c easylog.h main main.c main.log
$ cat main.log
hello 我的
上面的例子是最简配置,也就是不增加任何的多余信息, 在 easylog() 函数里面写什么,就输出什么。 还要就是,在什么都不设置的情况下,会自动创建和执行的文件一样的前缀的log文件。 获得这个文件名的方式是通过系统文件 "/proc/self/exe" 获取的。
要是我想换个其它的日志文件名字呢,那就是 那就需要复杂一些的操作需要在代码里面增加一行代码, 使用 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 ;
} $ 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 ;
}
编译,运行,查看日志:
$ gcc -o main main.c easylog.c
$ ./main
$ cat test.log
hello 我的
-- ::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 ;
} $ gcc -o main main.c easylog.c
$ ./main
$ cat test.log
hello 我的
-- ::23.847 -- hello 我的
-- ::38.438 main.c 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 ;
} $ gcc -o main main.c easylog.c
$ ./main
$ cat test.log
hello 我的
-- ::28.094 -- hello 我的
-- ::42.996 main.c main() -- hello 我的
::42.997 main.c main() -- hello 你的
从最后的日志中可以看出,日志的最后一行没有记录日期信息。
因为 easylog 的代码本身很少,一共也就200多行, 所以可以被使用者很容易的修改和使用。
最后,easylog 的代码放在了github上,地址在这里https://github.com/fengbohello/easylog ,欢迎同学们来使用 ^_^
同步发表:https://www.fengbohello.top/archives/easylog
easylog -- Linux 下的简单日志库的更多相关文章
- Linux下一个简单的日志系统的设计及其C代码实现
1.概述 在大型软件系统中,为了监测软件运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件.在日志文件中存放程序流程中的一些重要信息, 包括:变量名称及其值.消息结构定义.函数返回 ...
- linux下编译安装boost库
linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4. ...
- LINUX学习笔记——LINUX下EXP命令全库备份数据库文件
LINUX下EXP命令全库备份数据库文件 1)建立备份目录,目录操作权限授权给Oracle用户 mkdir /backup --创建backup文件夹 cd / --进入cd语句 ls -l ...
- Linux 下实时查看日志
Linux 下实时查看日志 cat /var/log/*.log 如果日志在更新,如何实时查看 tail -f /var/log/messages 还可以使用 watch -d -n 1 cat /v ...
- Linux下查看alert日志文件的两种方法
--linux下查看alert日志文件的两种方法: --方法1: SQL> show parameter background_dump_dest; NAME TYPE VALUE ------ ...
- linux下常用的日志分析命令
linux下常用的日志分析命令 本文介绍下,在linux中常用的一些分析日志的命令行或脚本,有需要的朋友参考下. 形如下面这样的access.log日志内容: 211.123.23.133 ...
- 嵌入式Linux下MP4视频录制库MP4V2移植和简单介绍
**************************************************************************************************** ...
- linux 下C语言编程库文件处理与Makefile编写
做开发快3年了,在linux下编译安装软件算是家常便饭了.就拿gcc来说,都有不下10次了,可基本每次都会碰到些奇奇怪怪的问题.看来还是像vs.codeblocks这样的ide把人弄蠢了.便下定决心一 ...
- 小知识积累-linux下一些简单开发配置
系统环境为 redhat enterprise 6.x,主要是针对初学者在linux下用gcc和vi简单测试开发的一些配置 1.vi 自动换行 在终端下敲入vi命令打开文件 : vi ~/.vimrc ...
随机推荐
- 安卓开发中SpannableString之富文本显示效果
SpannableString其实和String一样,都是一种字符串类型,SpannableString可以直接作为TextView的显示文本,不同的是SpannableString可以通过使用其方法 ...
- NiftyNet开源平台使用
NiftyNet是一款开源的卷积神经网络平台,专门针对医学图像处理分析,上一篇博客已经详细介绍了这个平台,接下来让我简单介绍一下目前我了解到的使用方法.更详细的使用方法.以及配置过程请查看NiftyN ...
- JavaScript中值类型与引用类型
JavaScript中的变量类型有哪些? 值类型:字符串(string).数值(number).布尔值(boolean).null.undefined 引用类型:对象(Object).数组(Array ...
- lvs负载均衡概述
- python 3.6 + numpy + matplotlib + opencv + scipy 安装
首先,下载并安装 python3.6: 然后,在网址http://www.lfd.uci.edu/~gohlke/pythonlibs/ 上 分别下载 numpy.scipy.matplotlib.o ...
- Scrapy基础(三) ------xpath基础
xpath简介 1,使用路径表达式在xml和html中解析 2,包含标准函数路(所有库支持的xpath语法一致) 3,W3C标准 节点: <body> 第一个节点: <h ...
- CC2431 代码分析①-CC2431 喊出第一声
CC2431 是一款可以基于RSSI 定位的 芯片. 定位原理,通过RSSI 强度换算距离. 可以打个类似的比方,一个人站在群山之间,每个山头都有一个地理坐标,然后大喊一声,各个方向会返回回声,通过回 ...
- 超详细Gitlab Runner环境配置中文教程
配置GitlabRunner环境 GitLab Runner 是一个开源项目, 它用来运行你定制的任务(jobs)并把结果返回给 GitLab. GitLab Runner 配合GitLab CI(G ...
- Hass.io: add-on Configurator
{ "username": "admin", "password": "admin", "cert ...
- [Codeforces394B]Very Beautiful Number(逆推)
退役了吗? 退役了…… 但是以后也许还不会一下子离开OI吧 因为我真的很喜欢OI啊 只是实力不如人 为了考上一个学OI的高中 要努力啊! [本题] 一道很好的题目了(刷CF题看到的) 和394A一样, ...