• 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的信息。

    好记性不如烂键盘---点滴、积累、进步!
  • 相关阅读:
    ECharts
    JavaScript实现数组去重方法
    面试题1
    Vue中的8种组件通信方式
    渐进式web应用 (PWA)
    单元测试(Jest 和 Mocha)
    axios
    Vue Router
    Vuex
    hash 模式与 history 模式小记
  • 原文地址:https://www.cnblogs.com/yanghailin/p/15794097.html
Copyright © 2020-2023  润新知