glog的使用

google 出的一个C++轻量级日志库,支持以下功能:

◆ 参数设置,以命令行参数的方式设置标志参数来控制日志记录行为;
◆ 严重性分级,根据日志严重性分级记录日志;
◆ 可有条件地记录日志信息;
◆ 条件中止程序。丰富的条件判定宏,可预设程序终止条件;
◆ 异常信号处理。程序异常情况,可自定义异常处理过程;
◆ 支持debug功能;
◆ 自定义日志信息;
◆ 线程安全日志记录方式;
◆ 系统级日志记录;
◆ google perror风格日志信息;
◆ 精简日志字符串信息

1.安装glog

$git clone https://github.com/google/glog
$./autogen.sh && ./configure && make && make install
gflags 库会默认安装在 /usr/local/lib/ 下,头文件放在 /usr/local/include/gflags/

2.包含头文件

#include <glog/logging.h>

3.使用glog
#include <iostream>
#include <glog/logging.h>

int main(int argc, char* argv[]) {
    google::InitGoogleLogging(argv[0]);
    FLAGS_log_dir = "/tmp/logs/"; 
    LOG(INFO) << "hello world";
    return 0;
}

编译:g++ glogtest.cpp -o glogtest -lglog

4.glog相关设置

glog默认是输出到stderr,可以通过初始化参数或设置输出日志目录,修改输出到指定文件
初始化参数默认是输出到/tmp目录下,格式为 “...log...

日志文件命名:如果可执行文件名为 “test”,则将日志输出到文件后,还会生成 test.ERROR,test.WARNING,test.INFO 三个链接文件,分别链接到对应级别的日志文件。

5.core dump输出文件

比如有空指针引用等报错,默认只会输出segment fault。
通过 google::InstallFailureSignalHandler()即可注册,将 core dumped 信息输出到 stderr。
google::InstallFailureWriter(&SignalHandle); //默认捕捉 SIGSEGV 信号信息输出会输出到 stderr,可以通过下面的方法自定义输出方式,SIGSEGV:segment fault报错。

#include <iostream>
#include <string>
#include <glog/logging.h>
using namespace std;
void test() {
    int *p; 
    *p = 5;
}
void SignalHandle(const char* data, int size) {
    string str = data;
    LOG(ERROR) << str << endl;
}

int main(int argc, char* argv[]) {
    google::InitGoogleLogging(argv[0]);
    google::InstallFailureSignalHandler();
    google::InstallFailureWriter(&SignalHandle);    //默认捕捉 SIGSEGV 信号信息输出会输出到 stderr,可以通过下面的方法自定义输出>方式:)
    FLAGS_log_dir = "/tmp/test/"; 
    test();
    LOG(INFO) << "hello world";
    return 0;
}

输出信息:
E0610 11:23:27.816742  4042 ltest.cpp:12] *** Aborted at 1560137007 (unix time) try "date -d @1560137007" if you are using GNU date ***

E0610 11:23:27.817553  4042 ltest.cpp:12] PC: @           0x401018 test()

E0610 11:23:27.817675  4042 ltest.cpp:12] *** SIGSEGV (@0x400eb0) received by PID 4042 (TID 0x7fe0983ae720) from PID 4198064; stack trace: ***

E0610 11:23:27.817975  4042 ltest.cpp:12]     @       0x3d4b632660 (unknown)

E0610 11:23:27.818025  4042 ltest.cpp:12]     @           0x401018 test()
n)

E0610 11:23:27.818066  4042 ltest.cpp:12]     @           0x40114b main
)
n)

E0610 11:23:27.818205  4042 ltest.cpp:12]     @       0x3d4b61ed1d __libc_start_main

E0610 11:23:27.818249  4042 ltest.cpp:12]     @           0x400ed9 (unknown)
rt_main

Segmentation fault
6.自定义日志

VLOG(1)

7.references

[1] http://rpg.ifi.uzh.ch/docs/glog.html
[2] https://blog.csdn.net/yuliying/article/details/19010075
[3] https://www.cnblogs.com/foreveryl/archive/2011/10/14/2212265.html
[4] http://www.yeolar.com/note/2014/12/20/glog/
[5] https://blog.51cto.com/mengjh/546766
[6] 更详细的glog说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值