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