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 ...
随机推荐
- CodeForces 1117C Magic Ship (循环节+二分答案)
<题目链接> 题目大意: 给定起点和终点,某艘船想从起点走到终点,但是海面上会周期性的刮风,船在任何时候都能够向四个方向走,或者选择不走,船的真正行走路线是船的行走和风的走向叠加的,求船从 ...
- springcloud(六):配置中心git示例
随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,需要的配置文件随着服务增加而不断增多.某一个基础服务信息变更,都会引起一系列的更新和重启,运维苦不堪言也容易出错.配置 ...
- Java并发编程:volatile关键字解析zz
volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以 ...
- Django路由详解
一.路由基础 1.路由url函数:路由自上而下进行匹配:url(正则路径,视图函数内存地址,默认参数,路由别名) 2.路由正则: 规定开始:^ | 规定结束:$ #url(r'index', view ...
- 图的封装(C++)
一. 问题说明 1.问题的简单描述 将图和网的的创建和基本操作分封装到class 用来熟悉此种数据结构和基于这种数据结构上的基本算法 采用VS2010编译环境 2.工作安排 二. 源代码 1.文件st ...
- Java笔记(五)泛型
泛型 一.基本概念和原理 泛型将接口的概念进一步延申,“泛型”的字面意思是广泛的类型. 类.接口和方法都可以应用于非常广泛的类型,代码与它们能够操作 的数据类型不再绑定到一起,同一套代码可以应用到多种 ...
- 潭州课堂25班:Ph201805201 django 项目 第三十课 linux 系统迁移 (课堂笔记)
进入虚拟环境, 冷冻 把安装环境放到这个文档中 pip freeze >> requirements.txt 在另一台机器中 pip install -r requirements.txt ...
- Django复习2
一.创建django程序 终端命令:django-admin startproject sitename IDE创建Django程序时,本质上都是自动执行上述命令 其他常用命令: python man ...
- 使用requests进行模拟登陆
import re import requests header = { 'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWe ...
- 摆脱CSS浏览器私有属性-moz, -ms, -webkit
为了兼容各个浏览器之间的私有属性,前端开发人员在写css的时候需要给一些css属性添加多个私有前缀,非常麻烦.这里给大家分享一个简单的方法可以让你以后无需手动给CSS添加私有属性. -moz代表fir ...