优秀开源项目之六:C++日志框架 Google Glog

来源:互联网 发布:20元左右小礼品 知乎 编辑:程序博客网 时间:2024/06/01 07:27

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

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

libglog是动态库,logging_unittest针对libglog的测试。

libglog_static是静态库,logging_unittest_static针对libglog_static的测试。

logging_unittest和logging_unittest_static是同一项目。

暂不讨论Glog的原理,直接分析如何使用它。

主要的代码:

[cpp] view plain copy
  1. int main(int argc, char **argv) {  
  2. #ifdef HAVE_LIB_GFLAGS  
  3.   ParseCommandLineFlags(&argc, &argv, true);  
  4. #endif  
  5.   
  6.   // Test some basics before InitGoogleLogging:  
  7.   //初始化捕捉流  
  8.   CaptureTestStderr();  
  9.   //根据日志的级别进行输出  
  10.   LogWithLevels(FLAGS_v, FLAGS_stderrthreshold,  
  11.                 FLAGS_logtostderr, FLAGS_alsologtostderr);  
  12.   //模拟参数  
  13.   LogWithLevels(0, 0, 0, 0);  // simulate "before global c-tors"  
  14.   
  15.   //获得信息  
  16.   const string early_stderr = GetCapturedTestStderr();  
  17.     //初始化  
  18.   InitGoogleLogging(argv[0]);  
  19.  //运行指定的基准  
  20.   RunSpecifiedBenchmarks();  
  21.   
  22.   FLAGS_logtostderr = true;  
  23.   //空函数  
  24.   InitGoogleTest(&argc, argv);  
  25. #ifdef HAVE_LIB_GMOCK  
  26.   InitGoogleMock(&argc, argv);  
  27. #endif  
  28.   
  29.   // so that death tests run before we use threads  
  30.   CHECK_EQ(RUN_ALL_TESTS(), 0);  
  31.     //初始化捕捉流  
  32.   CaptureTestStderr();  
  33.   
  34.   // re-emit early_stderr  输出消息  
  35.   LogMessage("dummy", LogMessage::kNoLogPrefix, GLOG_INFO).stream() << early_stderr;  
  36.   
  37.   //输出信息 信息包括警告信息和错误信息  
  38.   TestLogging(true);  
  39.   TestRawLogging();  
  40.   TestLoggingLevels();  
  41.   TestLogString();  
  42.   TestLogSink();  
  43.   TestLogToString();  
  44.   TestLogSinkWaitTillSent();  
  45.   TestCHECK();  
  46.   TestDCHECK();  
  47.   TestSTREQ();  
  48.   
  49.   // TODO: The golden test portion of this test is very flakey.  
  50.   EXPECT_TRUE(  
  51.       MungeAndDiffTestStderr(FLAGS_test_srcdir + "/src/logging_unittest.err"));  
  52.   
  53.   FLAGS_logtostderr = false;  
  54.   
  55.   TestBasename();  
  56.   TestSymlink();  
  57.   TestExtension();  
  58.   TestWrapper();  
  59.   TestErrno();  
  60.   TestTruncate();  
  61.   
  62.   ShutdownGoogleLogging();  
  63.   
  64.   fprintf(stdout, "PASS\n");  
  65.   return 0;  
  66. }  

深夜了,该洗洗睡了,函数就不帖出来了,想研究的下载源码包吧!

学习的目的是成熟!~

源码包(可直接编译)


原文链接:http://blog.csdn.net/banketree/article/details/7971737

阅读全文
1 0
原创粉丝点击