開源項目之C++日志框架 Google Glog
Google Glog 是一個C++語言的應用級日志記錄框架,提供了 C++ 風格的流操作和各種助手宏。
可以使用google的glog開源庫進行日志輸出。工程如圖:

libglog是動態庫,logging_unittest針對libglog的測試。
libglog_static是靜態庫,logging_unittest_static針對libglog_static的測試。
logging_unittest和logging_unittest_static是同一項目。
暫不討論Glog的原理,直接分析如何使用它。
主要的代碼:int main(int argc, char **argv) {
#ifdef HAVE_LIB_GFLAGS
ParseCommandLineFlags(&argc, &argv, true);
#endif
// Test some basics before InitGoogleLogging:
//初始化捕捉流
CaptureTestStderr();
//根據日志的級別進行輸出
LogWithLevels(FLAGS_v, FLAGS_stderrthreshold,
FLAGS_logtostderr, FLAGS_alsologtostderr);
//模擬參數
LogWithLevels(0, 0, 0, 0); // simulate "before global c-tors"
//獲得信息
const string early_stderr = GetCapturedTestStderr();
//初始化
InitGoogleLogging(argv[0]);
//運行指定的基準
RunSpecifiedBenchmarks();
FLAGS_logtostderr = true;
//空函數
InitGoogleTest(&argc, argv);
#ifdef HAVE_LIB_GMOCK
InitGoogleMock(&argc, argv);
#endif
// so that death tests run before we use threads
CHECK_EQ(RUN_ALL_TESTS(), 0);
//初始化捕捉流
CaptureTestStderr();
// re-emit early_stderr 輸出消息
LogMessage("dummy", LogMessage::kNoLogPrefix, GLOG_INFO).stream() << early_stderr;
//輸出信息 信息包括警告信息和錯誤信息
TestLogging(true);
TestRawLogging();
TestLoggingLevels();
TestLogString();
TestLogSink();
TestLogToString();
TestLogSinkWaitTillSent();
TestCHECK();
TestDCHECK();
TestSTREQ();
// TODO: The golden test portion of this test is very flakey.
EXPECT_TRUE(
MungeAndDiffTestStderr(FLAGS_test_srcdir + "/src/logging_unittest.err"));
FLAGS_logtostderr = false;
TestBasename();
TestSymlink();
TestExtension();
TestWrapper();
TestErrno();
TestTruncate();
ShutdownGoogleLogging();
fprintf(stdout, "PASS\n");
return 0;
}轉自:http://blog.csdn.net/banketree/article/details/7971737