最近发现了一个十分好用的日志库spdlog。这个库就连安装都很简单,你只需要brew install spdlog
或者sudo apt-get install spdlog
即可。
spdlog是一个十分十分轻量级的,但是速度很快很快的库。缺点是有一些函数不支持线程安全。但是我们目前并不关心这些。
spdlog的简单使用
spdlog是一个“要什么包含什么”的库,你想要什么功能就包含什么头文件。我们先包含spdlog.h
文件来使用最最基础的方法:
|
|
这里我们没有使用命名控件spdlog
,这样看上去更清楚。
首先你可以使用set_level
函数来设置当前的日志等级,所有的等级如下(从大到小):
critical(致命错误) err(错误) warn(警告) info(信息) debug(调试) trace(跟踪)
最后显示出来的信息只会是你指定等级及其左边的等级日志,比如将等级设置为warn
:
这样info, debug, trace信息都不会被显示出来。
你也可以传入off
来让所有信息都显示出来。
格式化输出
spdlog设计的可以像python一样,使用{}
作为占位符来输出:
|
|
只要类重载了operator<<,那么就可以被日志输出。
通过日志器(日志池?)来记日志
spdlog的最大优点在于他有很多很多的日志器来记录日志。你想要使用这些日志器的话需要包含相应的头文件。
使用控制台日志器stdout_color_mt
首先你要包含头文件spdlog/sinks/stdout_color_sinks.h
。所有的日志器的头文件都在sink
目录下。
然后你需要声明日志器对象并且使用:
|
|
使用的方法和最基本的spdlog一样。你可以设置日志等级啊,或者输出不同等级的日志。
每次获得一个日志器,spdlog内部都会进行管理(其实stdout_color_mt
是一个工厂方法,其参数是你的日志器的名称),可以通过spdlog::get()
函数传入日志器的名称来获得日志器。
11行的drop_all()
会释放所有的日志器。
使用日志器的好处有:
- 本日志器的日志等级设置不会影响到其他日志器
- 最后的输出信息会显示是哪个日志器输出的:
红色圈圈出来的那些就是日志器名称。
使用文件日志器basic_file_sink
同样的,需要包含spdlog/sinks/basic_file_sink.h
然后像一般日志器使用即可,但是由于是文件日志器,其工厂函数还需要文件的名称才行:
|
|
不过文件日志器每次记录不会将元数据覆盖掉。
还有很多其他的logger,但是我现在还不怎么用,先把他们官网的教程放在这里吧,要用到的时候可以去查一查"Sinks"一章,wiki