C++下使用glog教程

目录

一、背景介绍

二、代码

三、使用

1.log输出

2.gflags使用


glog使用教程

glog使用教程2

一、背景介绍

glog是一个输出日志的库,类似std::cout的功能,但是其输出更加规范标准,并且分为4个不同等级,最后将输出结果保存为log日志。

4个等级分别为:INFOWARNINGERRORFATAL

二、代码

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;
}