跳转至

logging 工具使用

介绍

为了方便同学们在之后的实验中 debug,为大家设计了一个 C++ 简单实用的分级日志工具。该工具将日志输出信息从低到高分成四种等级:DEBUGINFOWARNINGERROR。通过设定环境变量 LOGV 的值,来选择输出哪些等级的日志。LOGV 的取值是 0 到 3,分别对应到上述的 4 种级别 (0:DEBUG,1:INFO,2:WARNING,3:ERROR)。此外输出中还会包含打印该日志的代码所在位置。

使用

项目编译好之后,可以在 build 目录下运行 test_logging 可执行文件,该文件的源代码在 tests/test_logging.cpp,用法如下:

#include "logging.hpp"
// 引入头文件
int main(){
    LOG(DEBUG) << "This is DEBUG log item.";
    // 使用关键字 LOG,括号中填入要输出的日志等级
    // 紧接着就是<<以及日志的具体信息,就跟使用 std::cout 一样
    LOG(INFO) << "This is INFO log item";
    LOG(WARNING) << "This is WARNING log item";
    LOG(ERROR) << "This is ERROR log item";
    return 0;
}

接着在运行该程序的时候,设定环境变量 LOGV=0,那么程序就会输出级别大于等于 0 日志信息:

user@user:${ProjectDir}/build$ LOGV=0 ./test_logging
[DEBUG] (test_logging.cpp:5L  main)This is DEBUG log item.
[INFO] (test_logging.cpp:6L  main)This is INFO log item
[WARNING] (test_logging.cpp:7L  main)This is WARNING log item
[ERROR] (test_logging.cpp:8L  main)This is ERROR log item

输出中除了包含日志级别和用户想打印的信息,在圆括号中还包含了打印该信息代码的具体位置(包括文件名称、所在行、所在函数名称),可以很方便地定位到出问题的地方。

假如我们觉得程序已经没有问题了,不想看那么多的 DEBUG 信息,那么我们就可以设定环境变量 LOGV=1,选择只看级别大于等于 1 的日志信息:

user@user:${ProjectDir}/build$ LOGV=0 ./test_logging
[INFO] (test_logging.cpp:6L  main)This is INFO log item
[WARNING] (test_logging.cpp:7L  main)This is WARNING log item
[ERROR] (test_logging.cpp:8L  main)This is ERROR log item

当然 LOGV 值越大,日志的信息将更加简略。如果没有设定 LOGV 的环境变量,将默认不输出任何信息。

这里再附带一个小技巧,如果日志内容多,在终端观看体验较差,可以输入以下命令将日志输出到文件中:

user@user:${ProjectDir}/build$ LOGV=0 ./test_logging > log

然后就可以输出到文件名为 log 的文件中啦~