开源项目之C++日志框架 Google Glog

jopen 12年前

Google Glog 是一个C++语言的应用级日志记录框架,提供了 C++ 风格的流操作和各种助手宏。

  可以使用google的glog开源库进行日志输出。工程如图:

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