如何用blade来调用glog和gflags

本文介绍了如何在C++项目中使用glog和gflags两个Google开源库。通过示例代码展示了如何定义命令行参数并解析,以及如何记录不同级别的日志信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

紧跟上文。

在blade中已经将example对应的例子编译成功后,就可以使用google提供的库来方便后续的操作了,gflags可以方便实现命令行的解析,glog则是方便进行log的打印。

直接上代码:

#include <iostream>
#include "thirdparty/gflags/gflags.h"
#include "thirdparty/glog/logging.h"

using namespace std;

DEFINE_int32(qps, 10, "test qps");

int main(int argc, char * argv[])
{
        google::InitGoogleLogging(argv[0]);
        google::ParseCommandLineFlags(&argc, &argv, false);
        cout << "test qps:" << FLAGS_qps << endl;
        LOG(INFO) << "INFO" << endl;
        LOG(ERROR) << "ERROR" << endl;
        LOG(WARNING) << "WARNING" << endl;
        return 0;
}

对应的BUILD的代码为:

cc_binary(
        name = 'test.exe',
        srcs = 'test.cc',
        deps = [
                '//thirdparty/gflags:gflags',
                '//thirdparty/glog:glog'
        ]
)

目录结构是在example文件夹下建立一个目录,里面放进去BUILD文件和源文件即可。关于glog和gflags的具体使用,可以参考以下连接:

http://google-gflags.googlecode.com/svn/trunk/doc/gflags.html

http://google-glog.googlecode.com/svn/trunk/doc/glog.html

### 使用 glog 在 C 语言中进行日志记录 尽管 `glog` 是专为 C++ 设计的日志,但由于其底层依赖于标准 C 函数(如 `snprintf`),因此可以通过一些封装手段将其集成到 C 项目中。以下是实现这一目标的具体方法: #### 方法一:通过 C++ 封装接口调用 由于 C 不支持命名空间类的概念,可以直接编写一个简单的 C++ 文件作为桥梁,提供纯 C 风格的函数供外部调用。 ##### 实现步骤 1. 创建一个名为 `c_glog.cpp` 的文件,在其中定义一组静态函数用于初始化写入日志。 2. 提供对应的头文件 `c_glog.h`,声明这些函数以便被其他 C 源码访问。 ###### 头文件 (`c_glog.h`) ```c #ifndef C_GLOG_H #define C_GLOG_H #ifdef __cplusplus extern "C" { #endif void c_init_glog(const char* program_name); void c_set_vlog_level(int level); void c_info_log(const char* message); void c_warning_log(const char* message); void c_error_log(const char* message); #ifdef __cplusplus } #endif #endif // C_GLOG_H ``` ###### 源文件 (`c_glog.cpp`) ```cpp #include "c_glog.h" #include <glog/logging.h> // 初始化 glog void c_init_glog(const char* program_name) { ::google::InitGoogleLogging(program_name); // 调用 glog 初始化函数[^3] } // 设置 VLOG 等级 void c_set_vlog_level(int level) { google::VLOG(level); // 设置调试等级 } // 记录 INFO 级别的日志 void c_info_log(const char* message) { LOG(INFO) << message; } // 记录 WARNING 级别的日志 void c_warning_log(const char* message) { LOG(WARNING) << message; } // 记录 ERROR 级别的日志 void c_error_log(const char* message) { LOG(ERROR) << message; } ``` 3. 编译上述两个文件并链接至最终的应用程序中。 ##### 示例代码 (C 主程序) ```c #include "c_glog.h" int main() { const char *program_name = "./my_c_program"; c_init_glog(program_name); // 初始化 glog c_set_vlog_level(2); // 设置 VLOG 等级 c_info_log("This is an info log."); // 输出 INFO 日志 c_warning_log("This is a warning log."); // 输出 WARNING 日志 c_error_log("This is an error log."); // 输出 ERROR 日志 return 0; } ``` --- #### 方法二:利用环境变量配置 如果不想修改现有代码结构,则可以完全依靠环境变量完成基本功能配置。例如,设置以下环境变量即可控制日志行为: - `GLOG_logtostderr=1`: 将日志输出到标准错误流。 - `FLAGS_minloglevel=0`: 控制最低日志级别(默认值为 0 表示显示所有消息)。 注意此方案仅适用于简单场景;对于复杂需求仍推荐采用方法一所述的方式。 --- ### 总结 虽然 glog 原生并不支持直接嵌入 C 工程,但借助额外层封装能够轻松解决该问题。以上两种途径各有优劣,请依据实际开发条件灵活选用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值