其他分享
首页 > 其他分享> > glog入门demo

glog入门demo

作者:互联网

glog

一. 下载与安装

git clone https://github.com/google/glog.git
cd glog
./autogen.sh
./configure
make
make check
make install

二.glog简单的使用说明

1. log的严重等级

等级描述 对应的等级数字
INFO 0
WARNING 1
ERROR 2
FATAL 3

使用方法:

// 输出INFO等级的log信息。
LOG(INFO) << "This is INFO severity log information. ";
// 输出WARNING等级的log信息。
LOG(WARNING) << "This is WARNING severity log information. ";
// 输出ERROR等级的log信息。
LOG(ERROR) << "This is ERROR severity log information. ";
// 输出FATAL等级的log信息。
LOG(FATAL) << "This is FATAL severity log information. ";

2. 使用gflags在命令行中设置一些flag位.

在安装glog时,如果你的电脑中已经安装了gfalgs库的话, 在编译时,它会自动使用gflags库,然后呢,当你使用glog库时,就可以使用gflags库的命令行特性了。(需要在main函数的开始处加上对gflags的初始化代码gflags::ParseCommandLineFlags(&argc, &argv, true)). 常使用到flags包含(更详细看一下logging.cc文件):

3. Conditional/Occasional Logging

4. debug 模式的支持

下面定义的宏只会在debug模式下起作用,在release模式下无效,这样可以避免在release版本下打印日志影响运行速度。

5. CHECK 宏的使用

CHECK宏提供了一种机制:当条件不满足时,程序直接终止掉, 类似于ASSERT宏。

宏的名字 作用
CHECK_EQ(a,b) 检测a与b是否相等
CHECK_NE(a,b) 检测a与b是否不相等
CHECK_LE(a,b) 检测a是否小于或等于b
CHECK_LT(a,b) 检测a是否小于b
CHECK_GE(a,b) 检测a是否大于或等于b
CHECK_GT(a,b) 检测a是否大于b
CHECK_NOTNULL(指针) 检测指针不为空,它的返回值是传给它的指针. 该宏不能像c++的输出流那样使用

使用方法:

CHECK_EQ(a,b) << " 当a与b不相等时,程序会中止运行,并打印出该条目志信息。";

特别注意:当指针与NULL进行比较时,编译器会报错,因为把NULL认为是0。 如果不想报错,需要把NULL强转换为指针类型(static_cast<指针类型>(NULL).

6. 用户自己定义Failure Function

当产生FATAL的日志信息或CHECK宏检测失败时,程序就会终止掉,默认情况下glog会dump出堆栈的相关信息并以错误码1退出程序的运行,我们可以注册自定义的函数来运行你想要的函数。

// 第一步:定义自己的Failure函数
void MyFailureFunction()
{
    /*
     添加自己的代码。
     */
    exit(1);
}

// 第二步,在main函数的开始部分,加入一行如下代码:
int main(int argc, char* argv[])
{
    /*
       其它初始化代码。
     */
    google::InstallFailureFunction(&MyFailureFunction);
}

7. Failure Signal Handler

可以自定义一些信号捕捉函数,然后通过google::InstallFailureSignalHandler()函数来注册一下。具体没有深入研究。

三. 运行小小的demo

1. 创建文件glog_demo.cpp文件,内容如下:

#include <glog/logging.h>

int main(int argc, char** argv) {
    gflags::ParseCommandLineFlags(&argc, &argv, true);
    google::InitGoogleLogging(argv[0]);
    LOG(INFO) << "This is INFO log information";
    LOG(WARNING) << "This is WARNING log information";
    LOG(ERROR) << "This is ERROR log information";
    //LOG(FATAL) << "This is FATAL log information";

    LOG_IF(INFO, 1 < 2) << "This is true: 1 < 2. ";
    for (int i = 0; i < 100; ++i)
    {
        LOG_EVERY_N(INFO, 10) << "Log every 10 times. ";
    }

    CHECK(1 < 2) << "The world is end, because one is not less than  2. ";
    return 0;
}

2. 编译并运行

g++ glog_demo.cpp -o a.out -pthread -lgflags -lglog
./a.out glog_demo.cpp --logtostderr=true

标签:输出,gflags,log,demo,glog,CHECK,等级,入门
来源: https://www.cnblogs.com/yinheyi/p/12243832.html