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++中高效使用和處理Json格式數(shù)據(jù)的示例代碼
最近的項目在用c處理后臺的數(shù)據(jù)時,因為好多外部接口都在使用Json格式作為返回的數(shù)據(jù)結構和數(shù)據(jù)描述,如何在c中高效使用和處理Json格式的數(shù)據(jù)就成為了必須要解決的問題,需要的朋友可以參考下2023-11-11

