Apollo中的glog和gflag

Apollo中的glog和gflag

本文是学习Apollo中基础工具的第三篇文章,主要是学习glog和gflag。

首先必须说百度Apollo却是对google的那一套情有独钟啊,前有protobuf,bazel,在有glog和glag。google全家桶啊。

glog的基础知识学习

glog是Google开源的轻量级日志系统。支持以下功能:

◆ 参数设置,以命令行参数的方式设置标志参数来控制日志记录行为;
◆ 严重性分级,根据日志严重性分级记录日志;
◆ 可有条件地记录日志信息;
◆ 条件中止程序。丰富的条件判定宏,可预设程序终止条件;
◆ 异常信号处理。程序异常情况,可自定义异常处理过程;
◆ 支持debug功能;
◆ 自定义日志信息;
◆ 线程安全日志记录方式;
◆ 系统级日志记录;
◆ google perror风格日志信息;
◆ 精简日志字符串信息

1.安装glog

$git clone https://github.com/google/glog
$./autogen.sh && ./configure && make && make install

gflags 库会默认安装在 /usr/local/lib/ 下,头文件放在 /usr/local/include/gflags/

.包含头文件

#include <glog/logging.h>

3.使用glog

#include <iostream>
#include <glog/logging.h>

int main(int argc, char* argv[]) {
    google::InitGoogleLogging(argv[0]);
    FLAGS_log_dir = "/tmp/logs/"; 
    LOG(INFO) << "hello world";
    return 0;
}

编译:g++ glogtest.cpp -o glogtest -lglog

4.glog相关设置

glog默认是输出到stderr,可以通过初始化参数或设置输出日志目录,修改输出到指定文件
初始化参数默认是输出到/tmp目录下,格式为 “…log…”
有有一些默认参数可以设置:
FLAGS_log_dir = “”; //设置日志文件输出目录
FLAGS_alsologtostderr = false; //日志记录到文件的同时输出到strerr
FLAGS_max_log_size = 1800; //最大日志大小(MB), 如果设置为0将默认为1
其他参数查找在glog/logging.h文件中

glog在apollo中的应用

首先在log.h头文件中包含了

#include <glog/logging.h>

而后在多个需要用glog的位置对glog进行了初始化:

google::InitGoogleLogging(argv[0]);

gflag的基础知识学习

直接先看一段示例代码:

#include <gflags/gflags.h>

DEFINE_bool(big_menu, true, "Include 'advanced' options in the menu listing");
DEFINE_string(languages, "english,french,german", "comma-separated list of languages to offer in the 'lang' menu");

int main(int argc, char **argv) {
  google::ParseCommandLineFlags(&argc, &argv, true);

  cout << "argc=" << argc << endl;
  if (FLAGS_big_menu) {
    cout << "big menu is ture" << endl;
  } else {
    cout << "big menu is flase" << endl;
  }

  cout << "languages=" << FLAGS_languages << endl;
  return 0;
}

首先需要包含头文件。

然后通过类似于宏定义的方式,定义标志位。
gflags 暂时支持如下参数的类型:

DEFINE_bool: boolean
DEFINE_int32: 32-bit integer
DEFINE_int64: 64-bit integer
DEFINE_uint64: unsigned 64-bit integer
DEFINE_double: double
DEFINE_string: C++ string

gflag 提供的宏定义参数该宏的 3 个参数分别为命令行参数名,参数默认值,参数的帮助信息。

DEFINE_bool(big_menu, true, "Include 'advanced' options in the menu listing");
DEFINE_string(languages, "english,french,german", "comma-separated list of languages to offer in the 'lang' menu");

通过 FLAGS_name 像正常变量一样访问标志参数。在这个程序中,通过 FLAGS_big_menu和FLAGS_languages访问它们。
整合一起,初始化所有参数

定义号参数后,最后要告诉执行程序去处理命令行传入的参数,使得 FLAGS_*参数们得到正确赋值。

通常就是再main()函数中调用;

google::ParseCommandLineFlags(&argc, &argv, true);
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值