0

我的测试代码如下:

std::string strLogPath = "d:/logtest/";
google::InitGoogleLogging("test1");
FLAGS_log_dir = strLogPath;
FLAGS_stderrthreshold = google::GLOG_INFO;
FLAGS_minloglevel = google::GLOG_INFO;
//FLAGS_colorlogtostderr = true;

std::string strLogPath1 = "d:/logtest/L";
google::SetLogDestination(google::GLOG_INFO, strLogPath1.c_str()); 
google::SetLogDestination(google::GLOG_ERROR, strLogPath1.c_str());
google::SetLogDestination(google::GLOG_WARNING, strLogPath1.c_str());
google::SetLogDestination(google::GLOG_FATAL, strLogPath1.c_str());

LOG(INFO) << "infoinfo";
Sleep(1000);
LOG(WARNING) << "wwwww";
LOG(WARNING) << "wwwww";
LOG(ERROR) << "eeeeee";
Sleep(2000);
//LOG(FATAL) << "ffffff";
LOG(WARNING) << "wwwww";
LOG(WARNING) << "wwwww";
LOG(WARNING) << "wwwww";
google::ShutdownGoogleLogging();

我有两个日志文件,一个文件包含所有消息(INFO、WARNING 和 ERROR),另一个包含所有 WARNING 和 ERROR 消息,但没有 INFO。这安静出乎我的意料。我想要一个文件中的所有消息,并且不喜欢 WARNING 和 ERROR 消息在不同的文件中出现两次。如果有人能告诉我解决方案,将不胜感激。提前非常感谢。

4

1 回答 1

0

您可能已经为您的问题找到了解决方案,但无论如何我都会将其发布给其他用户。


据我所知,glog 不是为登录一个文件而设计的。因此,你不能只使用 glog 做你想做的事。

但是,您的问题还有其他解决方案。

第一:编写自己的小日志库。这不是很复杂,是一个很棒的编程培训;)

第二:仅适用于 *nix。使用 logtostderr-Flag 在 glog 中激活记录到 stderr 并将输出从 stderr 重定向到所需的日志文件。

FLAGS_logtostderr=1;
LOG(INFO) << "Info";
LOG(WARNING) << "Warning";
LOG(ERROR) << "Error";

在外壳上:./MyProg 2>logFile

最后:保持一切原样并删除不需要的日志文件。在您的程序中使用 c/c++ 或调用system()

于 2016-02-23T11:09:52.047 回答