ZhiBing's blog(码上看世界) ZhiBing's blog(码上看世界)
首页
  • Linux工具链

    • shell命令
  • 构建

    • CMake
    • Makefile
  • 版本管理

    • Git
    • Github
  • IDE及工具

    • vscode
    • CLion
  • 设计模式

    • 设计原则
  • 编程语言

    • C++
    • Go
    • Python
    • Shell
  • 调试

    • gdb
  • 开发者测试

    • gtest
  • 系统支撑

    • 操作系统
  • 性能优化

    • 编译优化选项
    • perf
    • valgrind
  • 容器

    • Docker
  • 微服务

    • Rancher
  • 其他
  • 随笔
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

ZhiBing Zheng

时间会回答成长
首页
  • Linux工具链

    • shell命令
  • 构建

    • CMake
    • Makefile
  • 版本管理

    • Git
    • Github
  • IDE及工具

    • vscode
    • CLion
  • 设计模式

    • 设计原则
  • 编程语言

    • C++
    • Go
    • Python
    • Shell
  • 调试

    • gdb
  • 开发者测试

    • gtest
  • 系统支撑

    • 操作系统
  • 性能优化

    • 编译优化选项
    • perf
    • valgrind
  • 容器

    • Docker
  • 微服务

    • Rancher
  • 其他
  • 随笔
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • 编程语言

    • C++

      • shared_ptr(智能指针)
      • unique_ptr
      • bind函数
      • cout
      • C++ main函数的传入参数(argc, argv)
      • GLog使用
        • 下载安装
        • 严重程度
        • 日志格式
        • 设置
          • 设置存放 Log 的目录
          • 设置只在终端显示 Log
          • 设置记录 Log 到本地以及终端显示
          • 设置记录到 stderr 的 log 的级别
          • 设置需要记录 log 的级别
        • 条件记录
        • 周期记录
        • 条件加周期记录
        • 限制 Log 输出次数
        • 支持调试模式
        • 崩溃处理
      • signals2
      • 编译期分派
      • 成员函数的调用效率
      • 返回值优化
      • 函数调用栈
      • 空类大小
      • 指针和数组的区别
      • 遵守三五原则
      • const限定符
      • static限定符
      • virtual限定符
      • 常用的CXX_FLAGS
      • 模版之AnyType
      • 模版之编译期断言
      • 模版之变参模板
    • Go

    • Python

    • shell

    • Rust

  • 调试

  • 开发者测试

  • 系统支撑

  • 性能优化

  • 通用领域
  • 编程语言
  • C++
zhengzhibing
2022-06-16
目录

GLog使用

# GLog使用

GLog 是一个应用程序级的日志记录的库,它提供了基于 C++样式流和各种帮助程序宏的日志记录 API,你可以很简单的将信息传输到LOG来记录消息。

# 下载安装

源码下载地址: https://github.com/google/glog.git

安装方法: 终端进入 glog 目录,以 root 身份运行以下命令:

$ ./autogen.sh && ./configure && make && make install
# glog的头文件位于/usr/local/include
# glog的库文件位于/usr/local/lib
1
2
3

# 严重程度

GLog 允许你制定消息的严重程度,一共有四个级别:INFO, WARNING, ERROR, FATAL。记录FATAL消息会终止程序(在记录消息之后),在 GLog 记录的消息的开头以I, W, E, F来标示信息的严重级别;

# 日志格式

默认情况下日志会写入本地/tmp/文件夹中,文件名格式:<program name>.<host name>.<user name>.log.<Severity level>.<date>-<time>.<pid>;

默认情况下。GLog 还会将ERROR和FATAL错误记录到stderr消息中(会在终端打印出来);

在终端打印出的消息的格式: <Serverity level><number> <time>.<number> <pid> <file>:<line number> <messages>

#include <glog/logging.h>
int main(int argc, char **argv) {
    google::InitGoogleLogging(argv[0]); // 初始化GLog库
    LOG(ERROR) << "There is error !!!";
    return 0;
}
1
2
3
4
5
6

image_1d1vb501m315143k1j9eavfsp419.png-41kB

# 设置

# 设置存放 Log 的目录

如果我们想指定 log 文件输出位置,那么我们可以对 GLog 设置一下标志(FLAGS_log_dir);

#include <glog/logging.h>
int main(int argc, char **argv) {
    google::InitGoogleLogging(argv[0]); // 初始化GLog库
    FLAGS_log_dir = "./"; // 将日志文件输出到本地
    LOG(ERROR) << "There is error !!!";
    return 0;
}
1
2
3
4
5
6
7

在本地就会产生日志文件,日志文件有四个基本文件<program name>.INFO,<program name>.WARNING,<program name>.ERROR,<program name>.FATAL,这些文件都汇总了这四类日志信息;

# 设置只在终端显示 Log

当我们只想将日志信息输出到stderr在终端中显示的时候,我们可以设置(FLAGS_logtostderr); 设置FLAGS_logtostderr = 1将使得日志信息记录到 stderr 而不会保存到本地日志文件中,及时你设置了FLAGS_log_dir;

# 设置记录 Log 到本地以及终端显示

当然我们可以鱼和熊掌兼得,我们可以通过设置FLAGS_alsologtostderr = 1将实现日志信息输出到 stderr,并且会记录到本地日志文件;

# 设置记录到 stderr 的 log 的级别

这仅仅是对于记录 Log 到 stderr 中的设置;

当我们需要将 WARNING 等级的 log 记录到 stderr 时,我们可以通过设置FLAGS_stderrthreshold = 1,那么 WARNING 以及更高级别的 Log 将会记录到 stderr 中;INFO: 0, WARNING: 1, ERROR: 2 FATAL: 3;

# 设置需要记录 log 的级别

我们可以指定那些 Log 被记录(无论是在本地还是 stderr),通过设置FLAGS_minloglevel = 0标志,默认是 0,设置这个标志表明,INFO 以及更高级别的 Log 将会被记录;INFO: 0, WARNING: 1, ERROR: 2 FATAL: 3;

# 条件记录

我们可以使用LOG_IF()来到达有条件的输出日志的目的;

int main(int argc, char **argv) {
    google::InitGoogleLogging(argv[0]); // 初始化GLog库
    FLAGS_logtostderr = 1; // 设置将Log记录到stderr
    for(int i = 0; i < 20; i++) {
        LOG_IF(INFO, i > 15) << "i > 15"; //当i > 15时,记录Log;
    }
    return 0;
}
1
2
3
4
5
6
7
8

# 周期记录

通过LOG_EVERY_N()实现周期性的输出日志,意思解释说,LOG_EVERY_N()执行 n 次才输出一次 Log;

int main(int argc, char **argv) {
    google::InitGoogleLogging(argv[0]); // 初始化GLog库
    FLAGS_logtostderr = 1; // 设置将Log记录到stderr
    for(int i = 0; i < 20; i++) {
        LOG_EVERY_N(INFO, 3) << "i: " << i; //每隔3次输出一次信息;
    }
    return 0;
}
1
2
3
4
5
6
7
8

# 条件加周期记录

通过LOG_IF_EVERY_N实现,当满足条件之后,每隔 n 次输出 Log;

int main(int argc, char **argv) {
    google::InitGoogleLogging(argv[0]); // 初始化GLog库
    FLAGS_logtostderr = 1; // 设置将Log记录到stderr
    for(int i = 0; i < 20; i++) {
        LOG_IF_EVERY_N(INFO, i > 10, 3) << "i > 10, i: " << i; //当i > 10之后,每隔3次输出一次信息;
    }
    return 0;
}
1
2
3
4
5
6
7
8

# 限制 Log 输出次数

通过LOG_FIRST_N()实现,只输出前 n 次信息;

int main(int argc, char **argv) {
    google::InitGoogleLogging(argv[0]); // 初始化GLog库
    FLAGS_logtostderr = 1; // 设置将Log记录到stderr
    for(int i = 0; i < 20; i++) {
        LOG_FIRST_N(INFO, 4) << "i: " << i; // 输出前4次Log
    }
    return 0;
}
1
2
3
4
5
6
7
8

# 支持调试模式

调试模式的宏仅在调试模式下有效,在非调试模式编译时为空。 在宏前面加D就支持了调试模式; DLOG(), DLOG_IF(), DLOG_EVERY_N(), ...

# 崩溃处理

当程序出现崩溃时,GLog 也可以提供 Bug 定位支持。通过google::InstallFailureSignalHandler()安装信号处理程序,当程序出现崩溃时,会输出崩溃的位置等相关信息。

image_1d1vg3l7h170r187n9c21lh5b1n1m.png-53.7kB

按照箭头的方向去看崩溃的信息所在位置,GLog 会一层一层的输出相关信息;

更具体的信息请参考官方文档。

#C++#glog
上次更新: 2022/06/17, 07:22:19
C++ main函数的传入参数(argc, argv)
signals2

← C++ main函数的传入参数(argc, argv) signals2→

最近更新
01
HPE gen10 plus 安装ESXI 7
06-12
02
ESXI 7安装黑群晖
06-12
03
ESXI 7安装win10
06-12
更多文章>
Theme by Vdoing | Copyright © 2022-2024 ZhBing Zheng | 粤ICP备2022062743号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式