glog示例无输出问题求助:MacOS下运行官方示例无预期结果
问题分析与解决
你的问题核心是没有让gflags解析命令行参数,导致传入的--logtostderr等配置未生效,同时glog的初始化顺序也需要调整。
具体问题点
- glog依赖gflags处理命令行参数,但你的代码未调用gflags的参数解析函数,传入的
--logtostderr=1等参数完全没被glog识别,程序依然使用默认配置。 - 默认情况下,glog会将INFO级别的日志写入
/tmp目录下的文件(文件名格式为程序名.INFO.用户名.主机名.时间戳),而非输出到终端,这就是你终端无内容、指定日志目录无写入的原因。
修复方案
1. 修改代码
添加gflags头文件,调整初始化顺序(先解析参数,再初始化glog),可选手动关闭日志确保缓冲区刷新:
#include <glog/logging.h> #include <gflags/gflags.h> int main(int argc, char* argv[]) { // 先解析命令行参数,第三个参数设为true表示解析后移除已处理的参数 google::ParseCommandLineFlags(&argc, &argv, true); // 初始化glog google::InitGoogleLogging(argv[0]); int num_cookies = 3; LOG(INFO) << "Found " << num_cookies << " cookies"; // 手动关闭日志,确保所有日志缓冲区都被刷新写入 google::ShutdownGoogleLogging(); return 0; }
2. 重新编译运行
编译命令保持不变:
g++ glog-test.cpp -I/usr/local/include -L/usr/local/lib -lglog -lgflags -o glog-test.o
运行时传入参数:
./glog-test.o --logtostderr=1
此时终端会正常输出Found 3 cookies。
额外验证
如果不修改代码,你可以去/tmp目录下查找对应的日志文件,应该能找到包含Found 3 cookies的内容,但这显然不是你想要的终端输出方式。
内容的提问来源于stack exchange,提问作者Satya
相关产品推荐
相关产品推荐

