C++?plog日志使用方法介紹
一、下載plog
下載鏈接:https://github.com/SergiusTheBest/plog/releases
下載后解壓出來,就得到了我們需要的頭文件了
二、在VS中搭建plog編譯環(huán)境
在vs中新建項目,根據(jù)以下圖片步驟將plog頭文件包含到項目中去
將include文件夾拷貝到項目路徑
將頭文件路徑包含進來
右鍵項目 - 屬性 - VC++目錄 - 包含目錄
將項目路徑中的include路徑包含進來
mian函數(shù)中加入頭文件
#include <plog/Log.h> #include <plog/Initializers/RollingFileInitializer.h>
至此,plog的編譯環(huán)境已經整好了,可以使用它了。
三、使用plog日志庫
簡單用法
使用init函數(shù)進行打開文件和初始化
plog::init(plog::debug, "日志.txt");
// 參數(shù)一使用的枚舉:
/*
enum Severity
{
none = 0,
fatal = 1, // 致命錯誤
error = 2, // 錯誤
warning = 3, // 警告
info = 4, // 通知
debug = 5, // 調試
verbose = 6
};
*/
參數(shù)一是日志的類型,一般用plog::debug或plog::verbose即可,參數(shù)二是日志路徑和文件名;當然還有參數(shù)三和參數(shù)四,將在下面例子講解。
初始化之后,就可以使用宏LOGD或PLOG_DEBUG或PLOG(plog::debug),將日志信息寫入日志文件中了。
LOGD << "日志打印";
LOGD << "日志Debug" << 123 << "test" << 3.1415926;
編譯運行,就會發(fā)現(xiàn)在項目路徑中多出了一個日志.txt的文件,這個就是我們這個項目中的日志文件。
進入就可以看到剛剛在代碼中寫入的日志信息了
日志中有時間信息,還有此日志是什么類型的(圖上的是DEBUG類型),此條日志信息是在那個函數(shù)中進行寫入的(圖上顯示的是main函數(shù),也是正確的),最后是日志信息!
當然,也還可以在函數(shù)中使用,例如新建一個函數(shù),在函數(shù)中寫日志信息
void testLog() { LOGD << "testLog()"; }
然后接著調用此函數(shù)
plog::init(plog::debug, "日志.txt");
LOGD << "日志打印";
LOGD << "日志Debug" << 123 << "test" << 3.1415926;
testLog();
LOGD << "函數(shù)結束";
編譯運行后日志文件
已經將日志信息寫入文件中了!
指定日志文件大小和個數(shù)
// 參數(shù)一:日志類型 參數(shù)二:日志文件名 參數(shù)三:日志文件大小 參數(shù)四:支持多少個日志文件
plog::init(plog::debug, "Hello.txt", 1024, 5); // 每個文件最大1024,最多5個文件,超過開始覆蓋
1024是指單個日志文件只能是1024大小左右;5是指該項目只會有5個日志文件,如果日志數(shù)據(jù)量大,超過了限制,那么會對前面的日志文件進行覆蓋。
寫一個例子,往日志文件中寫入七十條日志,看看是什么效果
int index = 0; while (index < 70) { LOGD << "測試日志:" << index++; }
編譯運行后
生成了5個日志文件Hello.1.txt、Hello.2.txt、Hello.3.txt、Hello.4.txt、Hello.txt
根據(jù)日志打印的數(shù)字可以看出,Hello.4.txt是最開始先使用的日志文件,剛開始名字應該是Hello.txt才對的,后來因為他的存儲大小超過了1024,所以plog會將他的文件名進行更改為Hello.1.txt,然后繼續(xù)創(chuàng)建一個Hello.txt的文件進行存儲日志信息;當文件大小又超過1024時,會首先將Hello.1.txt名字更改為Hello.2.txt,然后才會將Hello.txt更改為Hello.1.txt;然后繼續(xù)創(chuàng)建一個Hello.txt的文件進行存儲日志信息…
依此類推,最終得到上圖效果!
當超過五個日志文件大小存儲時,會對前面剛開始寫入的日志信息進行覆蓋
可以將上面的index判斷次數(shù)修改為85,編譯運行
int index = 0; while (index < 85) { LOGD << "測試日志:" << index++; }
之前的 Hello.4.txt 文件已經被刪除了,然后被之前的Hello.3.txt給替換掉了,前面的一樣會往后進行替換,最后就可以騰出新的文件Hello.txt進行繼續(xù)存儲了!
使用時間作為文件名
我就比較喜歡這種命名方式了
也就是將當天的年月日作為日志的文件名,這樣運行程序,每天也只會生成一個日志文件,記錄當天的日志信息,也方便后期查詢!
#include <string> #include <time.h> std::string getCurrentTime(std::string& year, std::string& month, std::string& day, std::string& hour, std::string& min, std::string& sec) { // 獲取系統(tǒng)時間 - 年月日時分秒 time_t _time; struct tm* target_time; time(&_time); target_time = localtime(&_time); year = std::to_string(target_time->tm_year + 1900); month = target_time->tm_mon + 1 > 9 ? std::to_string(target_time->tm_mon + 1) : "0" + std::to_string(target_time->tm_mon + 1); day = target_time->tm_mday > 9 ? std::to_string(target_time->tm_mday) : "0" + std::to_string(target_time->tm_mday); hour = target_time->tm_hour > 9 ? std::to_string(target_time->tm_hour) : "0" + std::to_string(target_time->tm_hour); min = target_time->tm_min > 9 ? std::to_string(target_time->tm_min) : "0" + std::to_string(target_time->tm_min); sec = target_time->tm_sec > 9 ? std::to_string(target_time->tm_sec) : "0" + std::to_string(target_time->tm_sec); return year + month + day + hour + min + sec; } int main(void) { std::string year, month, day, hour, min, sec; getCurrentTime(year, month, day, hour, min, sec); std::string logName = year + month + day + ".txt"; plog::init(plog::verbose, logName.c_str()); LOGD << "時間日志名字"; int index = 0; while (index < 85) { LOGD << "測試日志:" << index++; } return 0; }
編譯運行
根據(jù)當天的日期創(chuàng)建了日志
四、QTCreator使用plog日志庫
將plog文件夾拷貝到QT項目中去,注意,這里并沒有包含那個include文件夾
然后右鍵項目,選擇Add Existing Directory…
勾選上plog,點擊確定
這樣plog模塊就添加進來了
然后在QT項目中添加頭文件就可以使用了
#include <plog/Log.h> #include <plog/Initializers/RollingFileInitializer.h> plog::init(plog::verbose, "test.txt"); LOGD << QString::fromStdString("時間日志名字"); int index = 0; while (index < 85) { LOGD << QString::fromStdString("測試日志:") << index++; }
可以使用!
五、總結
其實plog還有很多用高效的用法,在文件夾samples中有案例,有興趣的可以去看看!
到此這篇關于C++ plog日志使用方法介紹的文章就介紹到這了,更多相關C++ plog日志內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++ 中malloc()和free()函數(shù)的理解
這篇文章主要介紹了C++ 中malloc()和free()函數(shù)的理解的相關資料,這里提供用法示例幫助大家理解這部分知識,需要的朋友可以參考下2017-08-08