各位看官,本人最近正在致力于研究log的写法,其中我看了一下我们公司,用的是github上的一个开源项目spdlog,所以我就研究了一下,并且试着模仿了一下我们公司打log的方法,现在就和各位看官一起分享一下。
一、Spdlog的定义以及他的优点
二、Spdlog如何移植
三、SpdLog的基本结构特性
四、我这边是如何使用
一、Spdlog的定义以及他的优点
Spdlog是一款开源的,基于c++的的日志库,简单来说,只要我们采用了这个开源库,我们就可以随意的来记录日志了(这个日志包括再stdout上显示和再文件中显示)。它有如下特性:
优点:1、它是一款轻量级别的库,我全部下载完也不过几百k(压缩包)。
2、他的使用条件非常灵活,可以单线程用,也可以多线程用(不过我还没玩过多线程),
3、使用形式非常灵活,就是你想把log形式定义成什么样的都可以。
4、输出形式灵活并且效果很好,比如你可以设置成日志一天一清,也可以把日志设置成多个文件的,另外输入的日志也可以设置颜色,这也是我最喜欢的部分。
5、日志分层:日志分成INFO,DEBUG,TRACE,ERROR等多种分层,我们可以根据需要设置自己每一条日志的等级。
6、我觉得开发这个的作者很贴心,把所有的使用方法都写成例子让你去看。
缺点:1、它必须是基于c++11以上版本的(其实我觉得这都不能算是缺点)
二、spdlog如何移植
我觉得spdlog移植的方法也很容易,只需要按照三个步骤:(我是linux系统的)
1、下载,放入linux系统
2、解压
3、创建build,进入build目录,执行cmake .. &make install(这里要说明的是一定要用make install,如果用make -j,如果只是把include放进去,会提示你没有权限)。好了,这样我们的spdlog就移植完成了。
三、spdlog的基本结构特性
我们从两个方面来说明:
横向方面:根据我们输入日志的不同我们创建的类型也有所不同(为了节省时间,我就不写参数了)
1、创建当天日志
spdlog::daily_logger_mt
说明:该日志创建成功以后,写入的日志只在当天生效,简单来说,就是在一天的某个时间点(这个函数中有参数可以设置)就会把日志清空。
2、创建多个文件日志
spdlog::rotating_logger_mt
说明:该日志创建成功以后,如果我们写入的日志大小大于某个值(这个值参数当中会有设置)会创建一个新文件,然后将新的日志写入到新文件当中。另外还要注意的是创建的文件数目也可以设定。
3、创建单个文件日志
spdlog::basic_logger_mt
说明:该日志创建成功以后,我们只会创建单个文件,所有日志都会一直再这个文件中累加。
4、输出终端
spdlog::stdout_color_mt
说明:该日志创建成功以后,我们的日志会自动打印到终端上,另外,每一种等级的日志颜色都会有所不同。
当然,example中提供的方法还远不止这几种,比如二进制的输出,异步的输出等等,不过我这里能用到的就是这些了。
纵向:
1、创建日志
2、设置level的值(默认是info)
3、使用函数打印
四、我这边如何使用
1、创建日志的值(我这边默认的是rotating)
2、设置log等级和pattern
3、使用宏封一层
4、直接使用
总结:今天聊了spdlog的特性,安装,基本数据类型和使用,总体来说我觉得简单,轻便,使用起来容易上手,真的是一个很不错的代码。