一.概述
在我们实际调试代码时,很多时候都需要用串口打印出调试信息,帮助定位问题。一般我们用printf()函数就可以了。但是用printf打印的信息太多以后,面对满屏的信息容易眼花缭乱。easylog是个开源的log输出的工具,代码量小,功能强大。可以按照不同的等级(不同等级输出信息颜色不同),或者按照标签屏蔽部分信息,或者按照关键字屏蔽部分信息。 EasyLogger 是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目
二.基础-ANSI转义协议及编译器自带的宏
1.编译器自带的宏
_FILE_:当前语句所在的文件名(字符串)
_LINE_:当前语句所在的行数(整型)
_TIME_:当前时间
_DATA_:
2.ANSI颜色转义协议
使用ANSI颜色协议我们可以指定串口打印的文字的字号,颜色等。但是一般的串口工具不支持ANSI协议,所以显示不出对应的效果,用xshell可以。

举例:
printf("\033[1;31;47mhello\033[om")//打印一个1号字体,前景色红色,背景色白色的hello字符串按照上述方式就可以输出有颜色的信息了,然后搭配内置的宏就可以定位信息的位置。但是这样实现太过复杂,所以我们下面介绍easylog
三.EasyLog的使用
1.easylog简介
easy是github上的开源软件,它的下载地址位于 https://github.com/armink/EasyLogger.
以下是功能简介:

2.easylog的打印等级
easylog的打印等级包括普通信息、错误、警告等。不同等级的信息颜色不一样。




3.easylog标签LOG_TAG的使用
当我们在easylog输出的.c文件中定义LOG_TAG以后,easylog输出的信息中就会有这个信息,一般我们会把LOG_TAG定义为文件名,这样通过打印信息,我们就能定位当相应的.c文件,例如上面的图中,就是定义了#define LOG_TAG MAIN,打印的信息里面就有这个内容了。
4.easylog的静态分級过滤功能
静态log过滤是在编译阶段就确定的。
静态过滤在代码方面的优缺点: 优、会让代码减小 占用更少的ROM 劣、相关log会物理剔除。
我们通过修改宏定义就可以过滤一些等级:

默认过滤等级为ELOG_LVL_VERBOSE(5),也就是所有等级信息都打印
5.easylog的动态分級过滤功能

(1)分级过滤

等级0~5,比如设置了4,那就只打印0~4等级的
(2)按标签过滤

(3)按关键字过滤

四.easyLog的移植
1.下载easylog源文件并添加到项目中
(1)下载的源文件
下载地址:github.com/armink/easylogger

(2).添加文件到项目中

2.easylog的模式配置
easylog有三种模式:
1.异步方式:
2.同步缓冲模式:要发送的数据先放到一个数组缓冲区中,只有缓冲区填满,串口才会发送
3.同步方式
由于我们在项目中使用的是同步方式,所以需要对elog_cfg.h进行配置

3.easylog需要我们事先的几个函数
elog_port.c为elog的接口函数,在这个函数中,需要我们实现几个函数
(1)底层串口发送函数

(2)新建一个互斥锁信号量
可以在elog.c中新建,elog_port.c中用extern调用。

(3)实现上锁/解锁函数
elog工作的时候,为了保护临界资源,会有上锁和解锁的操作,这两个函数在elog_port.c中,
需要我们编写内部实现函数

4.elog的使用
(1).初始化
在main中首先要調用elog_init()初始化

(2)调用功能函数
以下是elog的一些功能函数,不同功能函数打印的字体颜色不一样,以区别不同等级的信息

