ubuntu下glog使用方法

glog是google開源的日誌系統,方便大家進行代碼調試。

1. 安裝

git clone https://github.com/boboxxd/glog.git
./autogen.sh && ./configure && make && sudo make install

2.使用教程

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(glog_test)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake")

find_package(Glog REQUIRED)

add_executable(glog_test main.cpp)
target_link_libraries (glog_test glog)

main.cpp

#include <iostream>
#include <glog/logging.h>

int main(int argc, char** argv) {
    google::InitGoogleLogging("glog test main.cpp");
    google::SetLogFilenameExtension("log_");
    //會輸出導致程序結束的信號,和google::InstallFailureWriter(&FatalMessageDump); 配合使用,可以在程序出現嚴重錯誤時將詳細的錯誤信息打印出來
    google::InstallFailureSignalHandler(); //註冊一下即可。默認是打印到stderr中,可以通過InstallFailureWriter更改輸出目標。
    google::InstallFailureWriter(&FatalMessageDump);
    
    google::SetLogDestination(google::INFO, "log/"); // 把日誌同時記錄文件,最低級別爲INFO,此時全部輸出

    // 通過GFLAGS來設置參數,更多選項可以在logging.cc裏面查詢
    // 日誌等級分爲INFO, WARNING, ERROR, FATAL,如果是FATAL級別這直接運行報錯
    FLAGS_stderrthreshold = google::INFO;    //INFO, WARNING, ERROR都輸出,若爲google::WARNING,則只輸出WARNING, ERROR
    //google::SetStderrLogging(google::GLOG_INFO);
    FLAGS_colorlogtostderr = true;  //log爲彩色
    //FLAGS_logbufsecs = 0;  // Set log output speed(s)
	//FLAGS_max_log_size = 1024;  // Set max log file size
	//FLAGS_stop_logging_if_full_disk = true;  // If disk is full

    //基本用法:INFO,WAINING,ERROR
    LOG(INFO) << "Hello GLOG";                // << " cookies";
    LOG(WARNING) << "warning test";    // 會輸出一個Warning日誌
    LOG(ERROR) << "error test";        // 會輸出一個Error日誌
    LOG(FATAL) << "fatal";   // Logging a FATAL message terminates the program (after the message is logged)!
    // 類似assert的功能
    CHECK(access(argv[2], 0) != -1) << "No such file: "<<argv[2];

    //常見用法1:如果滿足一定條件,輸出錯誤log,退出程序
    if(1){
        LOG(ERROR) << "No image files for detection";
    }

    //常見用法2:glog提供VLOG宏來提供自定義打印等級的功能.Verbose
    //可以通過命令行"--v=n",來控制VLOG的輸出,VLOG(x),x<=n的情況,VLOG會輸出,否則不輸出.v默認爲0,所以默認情況下VLOG(-1),VLOG(0)能夠輸出.
    //通常把調試的LOG設爲1,這樣在默認情況下不輸出
    VLOG(-1) << "VLOG(-1) message.";
    VLOG(0) << "VLOG(0) message.";
    VLOG(1) << "VLOG(1) message.";
    VLOG(2) << "VLOG(2) message.";
    VLOG(3) << "VLOG(3) message.";

    //常見用法3:
    // 如果工程爲Debug模式,下面信息會輸出,如果是release模式,下面信息不會輸出.
    DLOG(INFO) << "DLOG:Debug Mode Message!";

    //不常見用法4:條件輸出
    LOG_IF(INFO, 89 > 4) << "89 > 4";

    //不常見用法5:頻率輸出,本質上是通過google::COUNTER這個計數機實現的
    LOG(INFO) << "Found " << google::COUNTER <<std::endl;
    for (int i = 0; i < 4; i++)
    {
        LOG_EVERY_N(ERROR, 5) << "每隔5次輸出一次 " << i;
        LOG_FIRST_N(ERROR, 2) << "前兩次輸出 " << i;
        LOG_IF_EVERY_N(WARNING, 1 < 2, 2) << "條件輸出+頻率" << google::COUNTER;
    }

    google::ShutdownGoogleLogging();  //關閉log服務
    return 0;
}

https://www.cnblogs.com/davidyang2415/p/3861112.html 中總結一些了常用的函數。

3.輸出結果

終端輸出結果:
Alt
此時由於代碼第二行輸出文本文件,在build/log文件夾中生成如下txt文件

Tlt
glog使用起來還是很方便的,只需在主函數開頭google::InitGoogleLogging就好了,其他文件直接包含#include <glog/logging.h>頭文件使用就可以,所有文件的log輸出到一個txt文件中,尤其是分級調試輸出,比cout調試好很多。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章