glog 使用例子
什么是 glog
glog 是 Google 提供的一个高性能、易用的 C++ 日志库。它具有以下特点: - 支持日志级别,可以通过设置日志级别来过滤日志输出。 - 支持自定义日志目录和日志文件名。 - 支持日志滚动,可以按照文件大小或时间进行日志滚动,以避免单个日志文件过大。 - 支持多线程,可以安全地在多个线程中记录日志。 - 提供了丰富的日志格式化选项,可以方便地定制输出格式。 - 支持日志信息的同时导出到标准错误输出或指定的文件。
安装 glog
首先需要下载 glog 的源码,可以从 GitHub 上的官方仓库下载。
1.克隆仓库到本地
git clone
2.进入 glog 目录
cd glog
3.编译源码
./configure
make
make install
4.添加库文件路径 打开 /etc/f 文件,添加以下内容:
/usr/local/lib
5.更新库路径
ldconfig
使用 glog
创建日志器
在使用 glog 之前,我们需要先创建一个日志器。日志器是记录和管理日志的核心对象。
#include <glog/logging.h>
...
int main() {
    google::InitGoogleLogging("my_program");
   
    ...
   
    return 0;
}
输出日志
glog 提供了多个宏用于输出不同级别的日志,常用的有 LOG(INFO)LOG(WARNING)LOG(ERROR)LOG(FATAL)
#include <glog/logging.h>
...
int main() {
    google::InitGoogleLogging("my_program");
   
    LOG(INFO) << "This is an info log.";
    LOG(WARNING) << "This is a warning log.";
    LOG(ERROR) << "This is an error log.";
   
    ...
   
    return 0;
}
设置日志级别
默认情况下,glog 会输出所有级别的日志。如果需要过滤日志输出,可以使用 FLAGS_minloglevel 变量来设置日志级别。
#include <glog/logging.h>
...
int main() {
    google::InitGoogleLogging("my_program");
   
    FLAGS_minloglevel = google::INFO; // 只输出 INFO 级别及以上的日志
   
    ...
   
    return 0;
}
自定义日志目录和文件名
默认情况下,glog 会将日志输出到当前目录下的 log 目录,并以程序名作为文件名。如果需要自定义日志目录和文件名,可以使用 FLAGS_log_dirFLAGS_log_file 变量。
#include <glog/logging.h>
...
int main() {
    google::InitGoogleLogging("my_program");
   
    FLAGS_log_dir = "/path/to/logs"; // 设置日志目录为 /path/to/logs
    FLAGS_log_file = "my_logs.log"; // 设置日志文件名为 my_logs.log
   
    ...
   
    return 0;
}
日志滚动
glog 可以在日志文件达到一定大小或超过一定时间后进行滚动。滚动的方式可以由 FLAGS_logbuflevelFLAGS_max_log_sizeFLAGS_logbufsecs 变量控制。
#include <glog/logging.h>
...
int main() {
    google::InitGoogleLogging("my_program");
   
    FLAGS_logbuflevel = -1; // 立即输出到日志文件
   
    FLAGS_max_log_size = 1024; // 设置最大日志文件大小为 1024MB
    FLAGS_logbufsecs = 0; // 立即输出到日志文件
   
    ...
   
    return 0;
}
多线程支持
glog 可以在多线程环境中安全地记录日志。不需要额外的设置,直接在多线程中使用即可。
#include <glog/logging.h>
#include <thread>
void my_thread() {
    LOG(INFO) << "This is a log from thread: " << std::this_thread::get_id();
}
int main() {
    google::InitGoogleLogging("my_program");
   
    std::thread t1(my_thread);
log4j2自定义日志文件名    std::thread t2(my_thread);
   
    t1.join();
    t2.join();
   
    ...
   
    return 0;
}
日志格式化
glog 提供了丰富的日志格式化选项,可以通过修改 FLAGS_logtostderrFLAGS_stderrthresholdFLAGS_colorlogtostderrFLAGS_log_prefix 等变量来定制日志输出格式。
#include <glog/logging.h>
...
int main() {
    google::InitGoogleLogging("my_program");
   
    FLAGS_logtostderr = 1; // 输出到标准错误输出