目录
一、背景介绍
glog是一个输出日志的库,类似std::cout的功能,但是其输出更加规范标准,并且分为4个不同等级,最后将输出结果保存为log日志。
4个等级分别为:INFO
、WARNING
、ERROR
和FATAL
二、代码
g++ glog_learn.cpp -lglog
#include <iostream>
#include <glog/logging.h>
int main(int argc, char** argv) {
FLAGS_alsologtostderr = 1;
google::InitGoogleLogging(argv[0]);
google::SetLogDestination(google::INFO, "./"); //指定输出日志文件路径
//分颜色输出
FLAGS_colorlogtostderr = true;
//设置记录到stderr的log的级别
FLAGS_stderrthreshold = google::WARNING;
// 日志等级分为INFO, WARNING, ERROR, FATAL,如果是FATAL级别这直接运行报错
LOG(INFO) << "INFO LOG!"; //正常色
LOG(WARNING) << "WARNING LOG!";//黄色
LOG(ERROR) << "ERROR LOG!"; //红色警告
//LOG(FATAL) << "FATAL LOG!";//直接报错结束
// 条件输出
int count = 100;
LOG_IF(INFO, count > 10) << "count is greater than 10";
// 频率输出,本质上是通过google::COUNTER这个计数机实现的
for (int i = 0; i < 10; i++)
{
LOG_EVERY_N(ERROR, 3) << "每隔3次输出一次 " << i;
LOG_FIRST_N(ERROR, 2) << "前两次输出 " << i;
LOG_IF_EVERY_N(WARNING, 1 < 2, 2) << "条件输出+频率" << google::COUNTER;//记录该语句被执行次数,从1开始
}
//当要结束glog时必须关闭库,否则会内存溢出
google::ShutdownGoogleLogging();
return 0;
}
三、使用
1.log输出
log类型 log日期 log时间 进程PID 文件和行数 输出信息
IWEF 月份信息 时间信息 进程号 输出信息的文件名称和在文件中的行数 调试信息
I20230305 22:53:58.705572 3721935 glog_learn.cpp:12] INFO LOG!
W20230305 22:53:58.707301 3721935 glog_learn.cpp:13] WARNING LOG!
2.gflags使用
标志位 | 含义
-----------------------------------------------------------------------------
logtostderr | 将log信息输出了stderr设备,而不将log信息写入到log文件。
----------------------------------------------------------------------------
stderrthreshold | 将log信息输出到stderr,并且将log信息写入到log文件。minloglevel 设置最小的log等级,比如讲该标志位设置为2,那么只会显示和记 录ERROR以及FATAL这两种类型的log信息。
-----------------------------------------------------------------------------
log_dir |设置log文件的存储路径
-----------------------------------------------------------------------------
v |类似于minloglevel,用来设置最大的显示等级,需要结合VLOG宏来一起使用
-----------------------------------------------------------------------------
vmodule | 标志位v的扩充,可以分别设置不同文件的log信息类别。
#include <iostream>
#include <glog/logging.h>
int main(int argc, char** argv) {
FLAGS_logtostderr = 1;
google::InitGoogleLogging(argv[0]);
FLAGS_v = 2;
VLOG(0) << " i is 0";
VLOG(1) << " i is 1";
VLOG(2) << " i is 2";
VLOG(3) << " i is 3";
return 0;
}