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 ...
随机推荐
- html-伪类
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Painting the Fence Gym - 101911E(构造)
There is a beautiful fence near Monocarp's house. The fence consists of nn planks numbered from left ...
- UVa 679 - Dropping Balls【二叉树】【思维题】
题目链接 题目大意: 小球从一棵所有叶子深度相同的二叉树的顶点开始向下落,树开始所有节点都为0.若小球落到节点为0的则往左落,否则向右落.并且小球会改变它经过的节点,0变1,1变0.给定树的深度D和球 ...
- 打印星星 - Python
打印星星是经典面试题目,考察流程控制中的循环和条件.本文对相关方法进行总结. 到的方法只要有(1)嵌套循环(2)center(3)format(^)(4)字符串乘法 # -*- coding:utf- ...
- 20172328《程序设计与数据结构》实验三 敏捷开发与XP实践报告
20172328<程序设计与数据结构>实验三 敏捷开发与XP实践报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 李馨雨 学号:20172328 实验教师:王志强 ...
- 流网络分析系统-SNAS
流网络分析系统-SNAS SNAS,Streaming Network Analytics System (project SNAS) ,是一个收集.跟踪.存取 千万条实时路由对象的系统. 官网:ht ...
- html5手势操作与多指操作封装与Canvas图片裁切实战
当前情况,移动端的开发占比越来越高,单指的拖拽触碰等操作是常规需要.特殊的多指操作与手势操作还需另做处理,而且还涉及到兼容性问题. // 屏幕上存在两根或两根以上的手指 时触发 仅IOS存在手势事件, ...
- XML相关的安全漏洞-XXE,XPATH小结
0x00前言: 本文主要小结以下php下的xpath查询xml结构的漏洞利用和XXE漏洞利用 xml是可扩展标记语言,它被设计出来是为了存储传输数据的. 它的结构是树形结构,并且标签要成对出现比如下面 ...
- MySQL数据库基本用法-聚合-分组
聚合 为了快速得到统计数据,提供了5个聚合函数 count(*)表示计算总行数,括号中写星与列名,结果是相同的 查询学生总数 select count(*) from students; max(列) ...
- shell 运算符
shell的逻辑运算符 涉及有以下几种类型,因此只要适当选择,可以解决我们很多复杂的判断,达到事半功倍效果. 一.逻辑运算符 逻辑卷标 表示意思 1. 关于档案与目录的侦测逻辑卷标! -f 常用!侦测 ...