c++ - 使用 glog 记录无法正常工作

标签 c++ glog

我在使用时使用 glog 进行日志记录:

LOG(INFO) << "something";

它按预期工作,但是当我像下面这样使用多个日志时,它不会记录,直到程序停止。当程序停止时,它会按预期记录所有内容。

LOG(INFO) <<"111111111111111";
LOG(INFO) <<"222222222222222";
LOG(INFO) <<"333333333333333";
LOG(INFO) <<"444444444444444";

但这里令人困惑的是,当我多次使用 LOG(WARNING) 时它完美地工作,即,即使程序正在运行,它也会记录所有内容,这与之前的情况不同,当程序停止时记录所有内容。

LOG(WARNING) <<"111111111111111";
LOG(WARNING) <<"222222222222222";
LOG(WARNING) <<"333333333333333";
LOG(WARNING) <<"444444444444444";

**非常感谢对此行为的任何帮助**

最佳答案

问题很简单。默认情况下,glog 为每个严重性使用一个日志文件,以防止两个流打开同一个文件。如果您通过不同的流在 c++ 中打开同一个文件,其中一个流(第一个打开文件的流)将优先写入文件。当第一个流关闭时,另一个只能开始写入该文件。

您要么必须为每种严重性声明不同的日志文件,要么将所有日志消息放在一个文件中,您只需编写自己的小型日志库即可。


似乎尤其需要使用 google::FlushLogFiles(google::INFO) 刷新 INFO 流。要在您要记录的每个信息之后执行此操作,我会为自己定义一个宏来调用刷新函数,如下所示:

#define log(severity, msg) LOG(severity) << msg; google::FlushLogFiles(google::severity); 

这确保流将被刷新并且您的所有消息将出现在日志文件中

关于c++ - 使用 glog 记录无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35572073/

相关文章:

c++ - 将信号(以不寻常的方式)连接到插槽

c++ - "InitGoogleLogging"是做什么的?

python - 防止失败的 glog CHECK 语句终止程序

linux - undefined symbol 引用 '_ULx86_64_step' libunwind.so.8 : error adding symbols: DSO missing from command line

c++ - 在 Linux 上使用 CMake 构建 Google glog

c++ - 管道 ppm 图像到 eog 图像查看器不起作用

c++ - Qt3D SceneLoader 实体未呈现

c++ - HDC 内存泄漏

c++ - 内置类型的构造函数初始化

c++ - Google glog 中的模块级详细日志记录