glog, gflags, gtest三件套

glog

简介
glog是google的一个c++开源日志系统,轻巧灵活,入门简单,而且功能也比较完善。支持以下功能

  • 严重性分级(INFO, WARNING, ERROR, FATAL). 可以根据日志严重性分级记录日志
  • 参数设置,以命令行参数的方式设置标志参数来控制日志记录行为
  • 可有条件地记录日志信息
  • 条件中止程序,丰富的条件判定宏,可预设程序终止条件
  • 异常信号处理,程序异常情况,可自定义异常处理过程。

相比于std::cout的优势:

  1. glog可以实现日志级别管理,这使得开发者可以轻松的控制哪些信息应该记录以及如何记录,std::cout只能进行基本的输出
  2. glog可以实现日志输出控制,可以灵活地决定日志输出到哪里
  3. glog具有性能优势,支持异步日志记录,可以减少对主执行流的干扰。
  4. glog可以实现自动附加信息,自动记录每条消息的时间戳、日志级别,文件名和行号,对于调试和追踪问题非常有用。
  5. glog可以实现条件和检测宏,如CHECK, CHEK_EQ, CHECK_NE
    总结: std::cout适合简单程序中的基本文本输出,glog适合大型项目。

使用方式

#include <glog/logging.h>
int main(int argc, char* argv[]) {
    // Initialize Google's logging library.
    google::InitGoogleLogging(argv[0]);
    // 解析命令行中的flag,
    google::ParseCommandLineFlags(&argc, &argv, true);
    LOG(FATAL) << 0;
    LOG(ERROR) << 1;
    LOG(WARNING) << 2
    LOG(INFO) << 4; 
    FLAGS_minloglevel = 0; // google::INFO level, 只有比严重性minloglevel高log才会输出到终端
    FLAGS_log_dir = /tmp/log; //设置log保存的路径
    // 条件log
    for (int i = 0 ; i < 100; i++) {
    	LOG_IF(INFO, i > 10) << "Got lots of cookies";   //当条件满足时输出日志
		LOG_EVERY_N(INFO, 10) << "Got the " << google::COUNTER << "th cookie";  //google::COUNTER 记录该语句被执行次数,从1开始,在第一次运行输出日志之后,每隔 10 次再输出一次日志信息
		LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << google::COUNTER << "th big cookie";  //上述两者的结合,不过要注意,是先每隔 10 次去判断条件是否满足,如果滞则输出日志;而不是当满足某条件的情况下,每隔 10 次输出一次日志信息。
		LOG_FIRST_N(INFO, 20) << "Got the " << google::COUNTER << "th cookie";  //当此语句执行的前 20 次都输出日志,然后不再输出
    }
    // CHECK宏
    int check_num = 0;
    CHECK(check_num == 0) << "check_num is not zero";
    // 在程序末尾,最好调用google::ShutdownGoogleLogging()来清理glog使用的资源
    google::ShutdownGoogleLogging();
}

参考:

  1. https://www.cnblogs.com/tianyajuanke/archive/2013/02/22/2921850.html
  2. https://github.com/AngryHacker/articles/blob/master/src/open_source_components/google_glog.md

gflags

gflags是google开源的用于处理命令行参数的项目。

#include <iostream>

#include <gflags/gflags.h>

/**
 *  定义命令行参数变量
 *  默认的主机地址为 127.0.0.1,变量解释为 'the server host'
 *  默认的端口为 12306,变量解释为 'the server port'
 */
DEFINE_string(host, "127.0.0.1", "the server host");
DEFINE_int32(port, 12306, "the server port");
DEFINE_bool(is_open, false, "the door is open");
DEFINE_double(price, 12.0, "the price");

int main(int argc, char** argv) {
    // 解析命令行参数,一般都放在 main 函数中开始位置
    gflags::ParseCommandLineFlags(&argc, &argv, true);
    // 访问参数变量,加上 FLAGS_
    std::cout << "The server host is: " << FLAGS_host
        << ", the server port is: " << FLAGS_port << std::endl;
    return 0;
}

reference: https://github.com/AngryHacker/articles/blob/master/src/open_source_components/google_glog.md

gtest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值