日志库-Glog介绍

2 阅读3分钟

1.简介

glog 是 Google 的一个 C++ 日志库,它提供了丰富的日志功能,包括条件日志、CHECK 宏等,同时支持日志的自动轮转。

日志行前缀格式:

Lyyyymmdd hh:mm:ss.uuuuuu threadid file:line] msg...
项目Value
yyyy
mm
dd
hh:mm:ss.uuuuuu时间
threadid线程ID
file文件名
line行号
msg消息

示例:

I1103 11:57:31.739339 24395 google.cc:2341] Command line: ./some_prog
I1103 11:57:31.739403 24395 google.cc:2342] Process id 24395

glog 是一个功能丰富的日志库,它提供了一系列的宏和函数来处理日志记录。以下是一些常用的 glog 接口及其用途:

  • 初始化和关闭: google::InitGoogleLogging(const char* argv[]): 初始化 glog日志系统。通常在 main 函数的开始处调用。
  • google::ShutdownGoogleLogging(): 关闭 glog日志系统。通常在 main 函数的末尾调用。

日志宏:

  • LOG(INFO): 记录一条信息级别的日志。
  • LOG(WARNING): 记录一条警告级别的日志。
  • LOG(ERROR): 记录一条错误级别的日志。
  • LOG(FATAL): 记录一条致命错误级别的日志,并终止程序。

条件日志宏:

  • LOG_IF(INFO, condition): 当条件为真时,记录一条信息级别的日志
  • LOG_EVERY_N(INFO, n): 每隔n 次调用记录一条信息级别的日志
  • LOG_IF_EVERY_N(INFO, condition, n): 当条件为真,并且每隔 n次调用时记录一条信息级别的日志。
  • LOG_FIRST_N(INFO, n): 在前 n 次调用时记录一条信息级别的日志。

检查宏:

  • CHECK(condition): 如果条件为假,记录一条错误日志并终止程序。
  • CHECK_EQ(val1, val2): 如果 val1和 val2 不相等,记录一条错误日志并终止程序。
  • CHECK_NE(val1, val2): 如果 val1 和 val2 相等,记录一条错误日志并终止程序。
  • CHECK_LE(val1, val2): 如果 val1 大于 val2,记录一条错误日志并终止程序。
  • CHECK_LT(val1, val2): 如果 val1 大于或等于 val2,记录一条错误日志并终止程序。
  • CHECK_GE(val1, val2): 如果 val1 小于 val2,记录一条错误日志并终止程序。
  • CHECK_GT(val1, val2): 如果 val1 小于或等于 val2,记录一条错误日志并终止程序。

命令行选项:

  • FLAGS_logtostderr: 设置为 true 以将日志输出到标准错误而不是文件。
  • FLAGS_alsologtostderr:设置为 true 以将日志同时输出到文件和标准错误。
  • FLAGS_colorlogtostderr: 设置为 true以在标准错误输出中使用颜色。
  • FLAGS_log_dir: 设置日志文件所在的目录。
  • FLAGS_minloglevel:设置日志的最小级别(数字越小,级别越高)。
  • FLAGS_max_log_size: 设置日志文件的最大大小。
  • FLAGS_logbufsecs: 设置日志缓冲区的刷新时间(秒)。

2.环境配置

下载地址:github.com/google/glog 在这里插入图片描述 下载压缩包,解压,使用cmake编译成库。 接下来就是Configure --> Generate --> Open Project一连三键。 在这里插入图片描述 拷贝编译好的lib、dll库和源码中的inlcude目录到demo工程中。

3.示例


#include <iostream>
#pragma warning(disable:4996)
#define GLOG_USE_GLOG_EXPORT
#include <glog/logging.h>

int main(int argc, char* argv[])
{
	FLAGS_log_dir = "./log";
	google::SetLogFilenameExtension(".log");

	// 初始化 Google 日志
	google::InitGoogleLogging("test");

	// 设置日志级别为 WARNING
	FLAGS_minloglevel = 1;

	// 记录不同级别的日志
	LOG(INFO) << "This is an info message";
	LOG(WARNING) << "This is a warning message";
	LOG(ERROR) << "This is an error message";

	// 使用条件日志
	int count = 20;
	LOG_IF(INFO, count > 10) << "Count is greater than 10";

	// 使用 CHECK 宏
	CHECK_NE(count, 0) << "Count should not be zero";

	// 严重错误日志,程序将终止
	LOG(FATAL) << "This is a fatal error";

	// 清理 Google 日志
	google::ShutdownGoogleLogging();

	return 0;
}