1、glog介绍
Google Logging(glog)是一个实现应用程序级日志记录的C++98库。该库提供了基于C++风格流和各种辅助宏的日志API。
2、glog下载安装
2.1. 下载程序
git clone https://github.com/google/glog.git
2.2. 使用cmake编译程序
执行 cd ./glog;mkdir build;cd build;cmake ..
命令编译glog模块。
编译报错,提示以下错误cmake版本要求3.21以上,我设备当前版本为:3.16.3。
处理办法:更新cmake的版本
a. 在glog中git log 查看版本信息,降低glog的版本。
b. 更新cmake的版本。
查看设备当前版本确实低了,这个是apt-get在线安装能达到的最新版本,为了拿到更新的版本,只能源码编译安装cmake了。
xb@ukylin:~/learn/vslam$ cmake --version cmake version 3.16.3
2.3、编译安装
执行 cd ./glog;mkdir build;cd build;cmake ..
命令后便生成了Makefile文件;
直接在build目录下编译安装即可。 make -j8; sudo make install
3、更新cmake版本
3.1、下载cmake文件
- 下载路径:
https://cmake.org/files/
- 合适的版本与架构
选择当前日期最新版本:cmake-3.28.0-rc5-linux-x86_64.tar.gz
架构选择:uname -a
查看架构
3.2、cmake安装方式有三种
- 通过软件包仓库安装: sudo apt install cmake ,版本较低
- 通过编译好的版本进行安装:下载对应架构编译好的压缩包,
cmake-3.28.0-rc5-linux-x86_64.tar.gz
,担心很多库文件或文件安装不正确。 - 从源码手动编译安装:选择源码安装吧, 比较麻烦。
3.3、 具体安装方式参考
https://blog.csdn.net/A2019250/article/details/133925449
4、glog的使用demo
4.1、测试源码
#include <iostream>
#include <gflags/gflags.h>
#include <glog/logging.h>
using namespace std;
DEFINE_int32(print, 1, "The print times");
DEFINE_string(name, "gflats test!", "The test to argv");
DEFINE_string(msg, "Hello World!", "The message to print");
int main(int argc, char **argv)
{
gflags::SetUsageMessage("Test CMake configuration of gflags library (gflags-config.cmake)");
gflags::SetVersionString("0.1");
gflags::ParseCommandLineFlags(&argc, &argv, true); //用于接受命令行的flag参数并更新默认参数
google::InitGoogleLogging("test");//使用glog之前必须先初始化库,仅需执行一次,括号内为程序名
FLAGS_alsologtostderr = true;//是否将日志输出到文件和stderr
FLAGS_colorlogtostderr = true;//是否启用不同颜色显示
google::SetLogDestination(google::GLOG_INFO, "./info.txt");//INFO级别的日志都存放到logs目录下且前缀为INFO_
google::SetLogDestination(google::GLOG_WARNING, "./warn.txt");//WARNING级别的日志都存放到logs目录下且前缀为WARNING_
google::SetLogDestination(google::GLOG_ERROR, "./error.txt"); //ERROR级别的日志都存放到logs目录下且前缀为ERROR_
google::SetLogDestination(google::GLOG_FATAL, "./fatal.txt"); //FATAL级别的日志都存放到logs目录下且前缀为FATAL_
for(int i=FLAGS_print; i>0;--i)
LOG(WARNING)<<"print:"<<FLAGS_print<<" name:"<<FLAGS_name<<" msg:"<<FLAGS_msg;
LOG(INFO) << "info";
LOG(WARNING) << "warning";
LOG(ERROR) << "error";
/*LOG(FATAL) << "fatal";*/
google::ShutdownGoogleLogging();//当要结束glog时必须关闭库,否则会内存溢出
gflags::ShutDownCommandLineFlags();
return 0;
}
4.2、cmake文件
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
# 注意包含gflags库的安装路径,一定要放在 ADD_EXECUTABLE 之前
LINK_DIRECTORIES(/usr/local/lib)
ADD_EXECUTABLE(hello glog.cpp)
target_link_libraries(hello gflags)
target_link_libraries(hello glog)
4.3、测试结果
在工程的build目录下,执行 cmake..;make;
命令之后便会在 build/bin/
目录下生成可执行文件。在此目录下执行命令: ./hello -print=6
,执行结果为:
注意:
针对 error 的log文件指记录了 error及fatal 等级的信息;
针对 ware 的log文件指记录了 ware、error及fatal 等级的信息;
针对 info 的log文件指记录了 info、ware、error及fatal 等级的信息;
5、glog的其他功能
优先主线任务,后续有需要再补充吧
6、推荐资料
https://blog.csdn.net/didi_ya/article/details/123029601
官方文档:http://google-glog.googlecode.com/svn/trunk/doc/glog.html。