我在使用时使用 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/