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 ...
随机推荐
- SpringMVC框架01——使用IDEA搭建SpringMVC环境
1.Spring MVC 入门 1.1.Spring MVC 简介 把Web应用程序分为三层,分别是: 控制器(Controller):负责接收并处理请求,响应客户端: 模型(Model):模型数据, ...
- 将ant Design本地化,可通过link以及script直接引入html中使用
一直想着能本地化antd的,不用npm以及dva那么复杂的配置环境来开发,并且本地化以后对以后链接flask的模板渲染机制也能很好的结合.下面是具体的实现方法: 1.将react的相关链接引入: &l ...
- 2160 母猪的故事 ACM 数学规律
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2160 中文题目,很简单,找规律就好. 自己画树状图找规律,开始想复杂了,找的规律:Fn=2*F(n-1)- ...
- 狄克斯特拉算法(Python实现)
概述 狄克斯特拉算法--用于在加权图中找到最短路径 ps: 广度优先搜索--用于解决非加权图的最短路径问题 存在负权边时--贝尔曼-福德算法 下面是来自维基百科的权威解释. 戴克斯特拉算法(英语:Di ...
- GDOI2017爆炸记
100种方法教你爆零.. 总结 其实这一次比赛除了三个sb的错误还是收获到了很多的.. 起码自己已经知道自己有进队的实力 不足的地方很大 主要是脑子不太好使,题目要不只能拿最暴力的分要不就能a 看了很 ...
- yii2 创建模块modules
方案一:如果模块儿较少,不用专门给模块儿目录定义别名,酱紫做就ok啦. 1.在项目根目录下面创建一个 modules 目录. 2.进入 gii : http://localhost/basic/web ...
- chardet查看字符串的编码(非常好用)
chardet不是python自带的包需要手动安装 chardet安装命令(dos下): pip install chardet 或: pip.exe install chardet 案例: > ...
- linux使用Anaconda管理多个版本的Python环境
1.下载(直接到清华镜像下载) 下载链接,选择合适的版本,我试了几个,选择了一个下载最快的,原谅我的渣渣网速, 官网在国外,必须找镜像,不然很慢很慢,,,,,, 此步骤真的很慢,重新选择下载网址,这个 ...
- PAT Basic 1011
1011 A+B 和 C (15 分) 给定区间 [−231,231] 内的 3 个整数 A.B 和 C,请判断 A+B 是否大于 C. 输入格式: 输入第 1 行给出正整数 T (≤10 ...
- centos安装谷歌浏览器
第一步: 切换到root权限 su root 或者 sudo -i 第二步: 下载新的软件源: 进入到 cd /etc/yum.repos.d 然后 wget http://people.centos ...