开源项目之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