c++日志库 glog介绍和使用
c吧
全部回复
仅看楼主
level 6

一、简介
glog是Google开发的C++日志库,主要用于应用程序级日志记录,支持多平台运行。以下是其核心功能及使用方式:
1、日志级别:支持DEBUG、INFO、WARNING、ERROR、FATAL五个级别,高优先级日志会包含低级别日志。
2、格式化输出:提供时间戳、文件名、行号等格式选项,增强日志可读性。
3、日志切分与压缩:按时间或文件大小切分日志,并自动压缩旧文件。
4、命令行控制:通过命令行参数动态调整日志行为(如级别、输出位置)。
5、崩溃日志缓冲:程序崩溃时保存未写入日志的缓冲内容。
二、设置
1、安装
sudo apt-get install libgoogle-glog-dev
2、引入头文件
#include <glog/logging.h>
3、在main函数中需要初始化glog
google::InitGoogleLogging(argv[0]);
这个函数将初始化Glog,并将日志输出到标准输出。如果您希望将日志输出到文件中,您可以使用以下设置
google::InitGoogleLogging(argv[0]);
google::SetLogDestination(google::GL0G INF0,"/path/to/log/file");
这个函数将将日志输出到指定的文件中。
4、记录日志:使用如下代码记录日志
LOG(INF0)<< "This is an information message"
LOG(WARNING)<< "This is a warning message"
LOG(ERROR)<< "This is an error message"
这些语句将分别记录信息、警告和错误日志,并将它们输出到标准输出或指定的文件中
5、设置日志级别
FLAGS minloglevel = google::INF0;
这个函数将设置日志级别为INFO,这意味着只有INFO、WARNING和ERROR级别的日志会被记录。
6、设置日志格式:
FLAGS_logtostderr =false,
FLAGS_log_dir="/path/to/log/dir";
FLAGS_alsologtostderr =true;
这些函数将设置日志输出的格式和位置。如果FLAGS_logtostderr设置为true,日志将输出到标准输出;如果设置为false,则日志将输出到指定的文件中。FLAGS_log_dir将指定日志文件的保存路径。如果FLAGS_alsologtostderr设置为true,则日志将同时输出到标准输出和指定的文件中。
7、关闭glog
在c++代码最后,需要关闭glog
google::ShutdownGoogleLogging();
该函数将清除glog的状态并关闭日志记录。
8、控制日志输出颜色
FLAGS_colorlogtostderr =true;
三、代码示例
示例代码1:基本使用方法
#include <glog/logging.h>
int main(int argc,char *argv[])
{
FLAGS_log_dir = "./"; //设置日志文件路径
FLAGS_alsologtostderr = true;//日志同时打印在终端和保存到文件中
google::InitGoogleLogging(argv[0]);
LOG(INFO)<<"hello world";
google::ShutdownGoogleLogging();
return 0;
}
编译程序:
g++ ex2.cpp -o res -lglog
程序运行结果:终端输出如下日志信息,同时产生默认名的日志文件。
I 12 24 17:29:03.625372 8029 ex2.cpp:12] hello world
日志类型 日期 时间 线程id 文件名 行号 日志信息
示例代码2:展示相关设置
#include <iostream>
#include <fcntl.h>
#include <glog/logging.h>
using namespace google;
int main(int argc,char *argv[])
{
int data = 0;
int fd = 0;
InitGoogleLogging(argv[0]);
SetLogDestination(GLOG_INFO,"./file.log");//设置日志文件名
FLAGS_minloglevel = INFO;//设置日志级别
SetLogFilenameExtension("_test_");//设置日志文件扩展
FLAGS_max_log_size = 20;//设置日志文件大小
fd = open("info.txt",O_RDONLY);
if(fd == -1)
{
LOG(ERROR)<<strerror(errno);
}
LOG(INFO)<<"hello world";
LOG(INFO)<<"this is an information message";
LOG(WARNING)<<"this is a warning message";
LOG(ERROR)<<"this is an error message";
LOG(INFO)<<"data = "<<data;
ShutdownGoogleLogging();
return 0;
}
产生的日志文件内容如下:
2025年12月24日 09点12分 1
1