glog 測試與使用


1.概括

GLog 是一個應用程序級的日志記錄的庫,它提供了基於C++樣式流和各種幫助程序宏的日志記錄API,你可以很簡單的將信息傳輸到LOG來記錄消息。
官方git https://github.com/google/glog

2. 四個等級

GLog允許你制定消息的嚴重程度,一共有四個級別:INFO, WARNING, ERROR, FATAL。記錄FATAL消息會終止程序(在記錄消息之后),在GLog記錄的消息的開頭以I, W, E, F來標示信息的嚴重級別;

enum SeverityLevel
{
  google::INFO = 0,
  google::WARNING = 1,
  google::ERROR = 2,
  google::FATAL = 3,
};

3.日志格式

默認情況下日志會寫入本地/tmp/文件夾中,文件名格式: . . .log. . -

4.設置參數

google::SetLogDestination(google::GLOG_INFO, "log/prefix_"); //設置特定嚴重級別的日志的輸出目錄和前綴。第一個參數為日志級別,第二個參數表示輸出目錄及日志文件名前綴
google::SetLogFilenameExtension("logExtension"); //在日志文件名中級別后添加一個擴展名。適用於所有嚴重級別
google::SetStderrLogging(google::GLOG_INFO); //大於指定級別的日志都輸出到標准輸出
FLAGS_logtostderr = true; //設置日志消息是否轉到標准輸出而不是日志文件
FLAGS_alsologtostderr = true; //設置日志消息除了日志文件之外是否去標准輸出
FLAGS_colorlogtostderr = true; //設置記錄到標准輸出的顏色消息(如果終端支持)
FLAGS_log_prefix = true; //設置日志前綴是否應該添加到每行輸出
FLAGS_logbufsecs = 0; //設置可以緩沖日志的最大秒數,0指實時輸出
FLAGS_max_log_size = 10; //設置最大日志文件大小(以MB為單位)
FLAGS_stop_logging_if_full_disk = true; //設置是否在磁盤已滿時避免日志記錄到磁盤
FLAGS_log_dir = "./"; // 將日志文件輸出到本地

在實際項目環境使用中,參數也可以命令行傳入:

./main -alsologtostderr 1 -log_dir ../log -num ${TEST_NUM} -test_list ${TEST_LIST} -threads ${USE_THREAD}

這里的alsologtostderr和log_dir就是glog所需要的參數。

5.條件

這里在caffe源碼大量使用

#define CHECK_EQ(val1, val2) CHECK_OP(_EQ, ==, val1, val2)
#define CHECK_NE(val1, val2) CHECK_OP(_NE, !=, val1, val2)
#define CHECK_LE(val1, val2) CHECK_OP(_LE, <=, val1, val2)
#define CHECK_LT(val1, val2) CHECK_OP(_LT, < , val1, val2)
#define CHECK_GE(val1, val2) CHECK_OP(_GE, >=, val1, val2)
#define CHECK_GT(val1, val2) CHECK_OP(_GT, > , val1, val2)

例子

 //有條件地中止程序
/   int a1 = 5;
    CHECK(a1 == 4) << "a1 != 4,fail!"; //a1 != 4的時候輸出后面的打印,然后中止程序退出

    int a2 = 3;
    int a3 = 3;
    CHECK_EQ(a2,a3)<<"not  equal";//a2==a3的時候才繼續運行  當a2!=a3的時候輸出后面的打印退出中止運行

6.例子1

FLAGS_log_dir = "c:\\Logs";
google::InitGoogleLogging(argv[0]);
google::SetLogDestination(google::GLOG_INFO, "c:\\Logs\\INFO_");
google::SetStderrLogging(google::GLOG_INFO);
google::SetLogFilenameExtension("log_");
FLAGS_colorlogtostderr = true;  // Set log color
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
char str[20] = "hello log!";
LOG(INFO) << str;
CStringA cStr = "hello google!";
LOG(INFO) << cStr;
LOG(INFO) << "info test" << "hello log!";  //輸出一個Info日志
LOG(WARNING) << "warning test";  //輸出一個Warning日志
LOG(ERROR) << "error test";  //輸出一個Error日志
google::ShutdownGoogleLogging();

7.例子2

CMakeLists.txt

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(test_glogs)
 
SET(CMAKE_BUILD_TYPE Debug)
 
#glog
include_directories(/data_2/lib/glog/include/)
link_directories(/data_2/lib/glog/lib)

add_executable(main main.cpp)
target_link_libraries(main glog)
set_property(TARGET main PROPERTY CXX_STANDARD 11)

main.cpp

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

int main(int argc, char** argv)
{

//    FLAGS_logtostderr = 1; // 將使日志信息記錄到stderr而不保存到本地日志文件中,即使你設置了FLAGS_log_dir;

    FLAGS_alsologtostderr = true; //除了日志文件之外是否需要標准輸出

    google::SetLogDestination(google::GLOG_WARNING, "./log/log_warning_"); //設置 google::WARNING 級別的日志存儲路徑和文件名前綴
    google::SetLogDestination(google::GLOG_INFO, "./log/log_info_"); //設置 google::INFO 級別的日志存儲路徑和文件名前綴

    google::InitGoogleLogging("test_2022");//初始化
//    google::SetLogDestination(google::GLOG_INFO,"./log/aTestInfo");//設置日志文件路徑,默認+時間作為生成的日志文件名


    LOG(INFO) << "info test";  //輸出一個Info日志


    //有條件地中止程序
//    int a1 = 5;
//    CHECK(a1 == 4) << "a1 != 4,fail!"; //a1 != 4的時候輸出后面的打印,然后中止程序退出

    int a2 = 3;
    int a3 = 3;
    CHECK_EQ(a2,a3)<<"---==";//a2==a3的時候才繼續運行  當a2!=a3的時候輸出后面的打印退出中止運行



    LOG(WARNING) << "warning test";  //輸出一個Warning日志
    LOG(ERROR) << "error test";  //輸出一個Error日志
//    LOG(FATAL) << "fatal test";  //輸出一個Fatal日志,這是最嚴重的日志並且輸出之后會中止程序

    std::cout<<"-------end-----"<<std::endl;
    return 0;
}

但是這里有個問題就是warning的單獨輸出了到一個日志文件中,
但是info的里面同時輸出了warning和info的信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM