C++?plog日志使用方法介紹
一、下載plog
下載鏈接:https://github.com/SergiusTheBest/plog/releases

下載后解壓出來,就得到了我們需要的頭文件了

二、在VS中搭建plog編譯環(huán)境
在vs中新建項(xiàng)目,根據(jù)以下圖片步驟將plog頭文件包含到項(xiàng)目中去
將include文件夾拷貝到項(xiàng)目路徑

將頭文件路徑包含進(jìn)來
右鍵項(xiàng)目 - 屬性 - VC++目錄 - 包含目錄
將項(xiàng)目路徑中的include路徑包含進(jìn)來

mian函數(shù)中加入頭文件
#include <plog/Log.h> #include <plog/Initializers/RollingFileInitializer.h>
至此,plog的編譯環(huán)境已經(jīng)整好了,可以使用它了。
三、使用plog日志庫(kù)
簡(jiǎn)單用法
使用init函數(shù)進(jìn)行打開文件和初始化
plog::init(plog::debug, "日志.txt");
// 參數(shù)一使用的枚舉:
/*
enum Severity
{
none = 0,
fatal = 1, // 致命錯(cuò)誤
error = 2, // 錯(cuò)誤
warning = 3, // 警告
info = 4, // 通知
debug = 5, // 調(diào)試
verbose = 6
};
*/
參數(shù)一是日志的類型,一般用plog::debug或plog::verbose即可,參數(shù)二是日志路徑和文件名;當(dāng)然還有參數(shù)三和參數(shù)四,將在下面例子講解。
初始化之后,就可以使用宏LOGD或PLOG_DEBUG或PLOG(plog::debug),將日志信息寫入日志文件中了。
LOGD << "日志打印";
LOGD << "日志Debug" << 123 << "test" << 3.1415926;
編譯運(yùn)行,就會(huì)發(fā)現(xiàn)在項(xiàng)目路徑中多出了一個(gè)日志.txt的文件,這個(gè)就是我們這個(gè)項(xiàng)目中的日志文件。

進(jìn)入就可以看到剛剛在代碼中寫入的日志信息了

日志中有時(shí)間信息,還有此日志是什么類型的(圖上的是DEBUG類型),此條日志信息是在那個(gè)函數(shù)中進(jìn)行寫入的(圖上顯示的是main函數(shù),也是正確的),最后是日志信息!
當(dāng)然,也還可以在函數(shù)中使用,例如新建一個(gè)函數(shù),在函數(shù)中寫日志信息
void testLog() {
LOGD << "testLog()";
}
然后接著調(diào)用此函數(shù)
plog::init(plog::debug, "日志.txt");
LOGD << "日志打印";
LOGD << "日志Debug" << 123 << "test" << 3.1415926;
testLog();
LOGD << "函數(shù)結(jié)束";
編譯運(yùn)行后日志文件

已經(jīng)將日志信息寫入文件中了!
指定日志文件大小和個(gè)數(shù)
// 參數(shù)一:日志類型 參數(shù)二:日志文件名 參數(shù)三:日志文件大小 參數(shù)四:支持多少個(gè)日志文件
plog::init(plog::debug, "Hello.txt", 1024, 5); // 每個(gè)文件最大1024,最多5個(gè)文件,超過開始覆蓋
1024是指單個(gè)日志文件只能是1024大小左右;5是指該項(xiàng)目只會(huì)有5個(gè)日志文件,如果日志數(shù)據(jù)量大,超過了限制,那么會(huì)對(duì)前面的日志文件進(jìn)行覆蓋。
寫一個(gè)例子,往日志文件中寫入七十條日志,看看是什么效果
int index = 0;
while (index < 70) {
LOGD << "測(cè)試日志:" << index++;
}
編譯運(yùn)行后

生成了5個(gè)日志文件Hello.1.txt、Hello.2.txt、Hello.3.txt、Hello.4.txt、Hello.txt
根據(jù)日志打印的數(shù)字可以看出,Hello.4.txt是最開始先使用的日志文件,剛開始名字應(yīng)該是Hello.txt才對(duì)的,后來因?yàn)樗拇鎯?chǔ)大小超過了1024,所以plog會(huì)將他的文件名進(jìn)行更改為Hello.1.txt,然后繼續(xù)創(chuàng)建一個(gè)Hello.txt的文件進(jìn)行存儲(chǔ)日志信息;當(dāng)文件大小又超過1024時(shí),會(huì)首先將Hello.1.txt名字更改為Hello.2.txt,然后才會(huì)將Hello.txt更改為Hello.1.txt;然后繼續(xù)創(chuàng)建一個(gè)Hello.txt的文件進(jìn)行存儲(chǔ)日志信息…
依此類推,最終得到上圖效果!
當(dāng)超過五個(gè)日志文件大小存儲(chǔ)時(shí),會(huì)對(duì)前面剛開始寫入的日志信息進(jìn)行覆蓋
可以將上面的index判斷次數(shù)修改為85,編譯運(yùn)行
int index = 0;
while (index < 85) {
LOGD << "測(cè)試日志:" << index++;
}

之前的 Hello.4.txt 文件已經(jīng)被刪除了,然后被之前的Hello.3.txt給替換掉了,前面的一樣會(huì)往后進(jìn)行替換,最后就可以騰出新的文件Hello.txt進(jìn)行繼續(xù)存儲(chǔ)了!
使用時(shí)間作為文件名
我就比較喜歡這種命名方式了
也就是將當(dāng)天的年月日作為日志的文件名,這樣運(yùn)行程序,每天也只會(huì)生成一個(gè)日志文件,記錄當(dāng)天的日志信息,也方便后期查詢!
#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)時(shí)間 - 年月日時(shí)分秒
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 << "時(shí)間日志名字";
int index = 0;
while (index < 85) {
LOGD << "測(cè)試日志:" << index++;
}
return 0;
} 編譯運(yùn)行

根據(jù)當(dāng)天的日期創(chuàng)建了日志
四、QTCreator使用plog日志庫(kù)
將plog文件夾拷貝到QT項(xiàng)目中去,注意,這里并沒有包含那個(gè)include文件夾

然后右鍵項(xiàng)目,選擇Add Existing Directory…

勾選上plog,點(diǎn)擊確定

這樣plog模塊就添加進(jìn)來了

然后在QT項(xiàng)目中添加頭文件就可以使用了
#include <plog/Log.h>
#include <plog/Initializers/RollingFileInitializer.h>
plog::init(plog::verbose, "test.txt");
LOGD << QString::fromStdString("時(shí)間日志名字");
int index = 0;
while (index < 85) {
LOGD << QString::fromStdString("測(cè)試日志:") << index++;
}
可以使用!
五、總結(jié)
其實(shí)plog還有很多用高效的用法,在文件夾samples中有案例,有興趣的可以去看看!
到此這篇關(guān)于C++ plog日志使用方法介紹的文章就介紹到這了,更多相關(guān)C++ plog日志內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的掃雷游戲
windows自帶的游戲《掃雷》是陪伴了無數(shù)人的經(jīng)典游戲,本文將利用C語(yǔ)言實(shí)現(xiàn)這一經(jīng)典的游戲,文中的示例代碼講解詳細(xì),感興趣的可以學(xué)習(xí)一下2022-05-05
在C++中高效使用和處理Json格式數(shù)據(jù)的示例代碼
最近的項(xiàng)目在用c處理后臺(tái)的數(shù)據(jù)時(shí),因?yàn)楹枚嗤獠拷涌诙荚谑褂肑son格式作為返回的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)描述,如何在c中高效使用和處理Json格式的數(shù)據(jù)就成為了必須要解決的問題,需要的朋友可以參考下2023-11-11
使用C# 判斷給定大數(shù)是否為質(zhì)數(shù)的詳解
本篇文章是對(duì)使用C#判斷給定大數(shù)是否為質(zhì)數(shù)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
使用C語(yǔ)言訪問51單片機(jī)中存儲(chǔ)器的核心代碼
這篇文章主要介紹了使用C語(yǔ)言訪問51單片機(jī)中存儲(chǔ)器的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)線性表教程示例詳解
這篇文章主要為大家介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)線性表的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-02-02
算法之排序算法的算法思想和使用場(chǎng)景總結(jié)
這篇文章主要介紹了算法之排序算法的算法思想和使用場(chǎng)景總結(jié),本文講解了插入排序、交換排序、選擇排序等幾大類排序算法的特點(diǎn)、思想和使用場(chǎng)景,需要的朋友可以參考下2014-08-08

