C++:log日誌

前言

  日誌一般是記錄一些程序運行信息的文件,一般是用於快速定位錯誤所在,追蹤程序運行的過程和進度、採集運行環境等作用。說白了簡單粗暴點就是程序掛了,可以看到大概在哪裏掛的,掛的原因可能有哪些等作用。
  最近在github上找了些C++的日誌庫,做了些簡單的使用記錄。

一、NanoLog C++ 11

  在github上找到的NanoLog有幾個版本,不過我只下載了兩個星星數量最高的,一個是C++11的,一個是C++17的。
  C++11這個比較簡單,就一個頭文件和源文件,使用起來也比較簡單,首先包含頭文件NanoLog.hpp,然後通過nanolog::initialize()初始化一個實例,nanolog::initialize的第二個參數和第三個參數是設置日誌的存放路徑和文件名,第四個參數設置當日志文件大小超過多少Mb的時候會生成新的日誌文件,這樣可以防止某個日誌文件變得特別大,而第一個參數是幹嘛的呢?看到它傳入的參數有兩種:

  1. GuaranteedLogger:提供保證日誌行不會被刪除。
  2. NonGuaranteedLogger:不保證日誌記錄。使用環緩衝區保存日誌行。當環滿時,插槽中的前一個日誌行將被丟棄。即使環緩衝區已滿,也不會阻止生產者。環緩衝區大小-日誌行被推入由此參數確定大小的mpsc環緩衝區。由於每條日誌行是256字節,所以ring_buffer_size = ring_buffer_size_mb * 1024 * 1024 / 256

  使用的程序例子如下:

#include "NanoLog.hpp"

int main()
{
    // Ensure initialize is called once prior to logging.
    // This will create log files like /tmp/nanolog1.txt, /tmp/nanolog2.txt etc.
    // Log will roll to the next file after every 1MB.
    // This will initialize the guaranteed logger.
    nanolog::initialize(nanolog::GuaranteedLogger(), "./", "nanolog", 1);

    // Or if you want to use the non guaranteed logger -
    // ring_buffer_size_mb - LogLines are pushed into a mpsc ring buffer whose size
    // is determined by this parameter. Since each LogLine is 256 bytes,
    // ring_buffer_size = ring_buffer_size_mb * 1024 * 1024 / 256
    // In this example ring_buffer_size_mb = 3.
    // nanolog::initialize(nanolog::NonGuaranteedLogger(3), "/tmp/", "nanolog", 1);
    for (int j=0; j<100000;j++)
    {
        for (int i = 0; i < 50000; ++i)
        {
            LOG_INFO << "Sample NanoLog: " << i;
        }
    }

    // Change log level at run-time.
    nanolog::set_log_level(nanolog::LogLevel::CRIT);
    LOG_WARN << "This log line will not be logged since we are at loglevel = CRIT";

    return 0;
}

  使用的程序例子還是比較簡單,而且速度其實還是很快的,所以基本上這個庫還是夠用的。

二、NanoLog C++ 17

  C++17這個的工程稍微複雜一丟丟,我決定洗澡睡覺…後面有空補上…

夢斷陳王羅襪,情傷學士琵琶。
又見西風換年華。數杯添淚酒,
幾點送秋花。行人天一涯。
– 元代 李致遠 《紅繡鞋·晚秋》

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