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;
}
深夜了,该洗洗睡了,函数就不帖出来了,想研究的下载源码包吧!
学习的目的是成熟!~