C/C++ plog日志简单用法
Posted cpp_learners
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++ plog日志简单用法相关的知识,希望对你有一定的参考价值。
最近突然心血来潮,想学一下日志方面的操作。在网上找了很多日志相关的技术,最终还是决定使用plog,小巧,快速,跨平台.
一、下载plog
下载链接:https://github.com/SergiusTheBest/plog/releases
下载后解压出来,就得到了我们需要的头文件了
二、在VS中搭建plog编译环境
在vs中新建项目,根据以下图片步骤将plog头文件包含到项目中去
-
将include文件夹拷贝到项目路径
-
将头文件路径包含进来
右键项目 - 属性 - VC++目录 - 包含目录
将项目路径中的include路径包含进来
-
mian函数中加入头文件
#include <plog/Log.h> #include <plog/Initializers/RollingFileInitializer.h>
至此,plog的编译环境已经整好了,可以使用它了。
三、使用plog日志库
-
简单用法
使用init函数进行打开文件和初始化
plog::init(plog::debug, "日志.txt"); // 参数一使用的枚举: /* enum Severity none = 0, fatal = 1, // 致命错误 error = 2, // 错误 warning = 3, // 警告 info = 4, // 通知 debug = 5, // 调试 verbose = 6 ; */
参数一是日志的类型,一般用plog::debug或plog::verbose即可,参数二是日志路径和文件名;当然还有参数三和参数四,将在下面例子讲解。
初始化之后,就可以使用宏LOGD或PLOG_DEBUG或PLOG(plog::debug),将日志信息写入日志文件中了。
LOGD << "日志打印"; LOGD << "日志Debug" << 123 << "test" << 3.1415926;
编译运行,就会发现在项目路径中多出了一个日志.txt的文件,这个就是我们这个项目中的日志文件。
进入就可以看到刚刚在代码中写入的日志信息了
日志中有时间信息,还有此日志是什么类型的(图上的是DEBUG类型),此条日志信息是在那个函数中进行写入的(图上显示的是main函数,也是正确的),最后是日志信息!当然,也还可以在函数中使用,例如新建一个函数,在函数中写日志信息
void testLog() LOGD << "testLog()";
然后接着调用此函数
plog::init(plog::debug, "日志.txt"); LOGD << "日志打印"; LOGD << "日志Debug" << 123 << "test" << 3.1415926; testLog(); LOGD << "函数结束";
编译运行后日志文件
已经将日志信息写入文件中了! -
指定日志文件大小和个数
// 参数一:日志类型 参数二:日志文件名 参数三:日志文件大小 参数四:支持多少个日志文件 plog::init(plog::debug, "Hello.txt", 1024, 5); // 每个文件最大1024,最多5个文件,超过开始覆盖
1024是指单个日志文件只能是1024大小左右;5是指该项目只会有5个日志文件,如果日志数据量大,超过了限制,那么会对前面的日志文件进行覆盖。
写一个例子,往日志文件中写入七十条日志,看看是什么效果
int index = 0; while (index < 70) LOGD << "测试日志:" << index++;
编译运行后
生成了5个日志文件Hello.1.txt、Hello.2.txt、Hello.3.txt、Hello.4.txt、Hello.txt根据日志打印的数字可以看出,Hello.4.txt是最开始先使用的日志文件,刚开始名字应该是Hello.txt才对的,后来因为他的存储大小超过了1024,所以plog会将他的文件名进行更改为Hello.1.txt,然后继续创建一个Hello.txt的文件进行存储日志信息;当文件大小又超过1024时,会首先将Hello.1.txt名字更改为Hello.2.txt,然后才会将Hello.txt更改为Hello.1.txt;然后继续创建一个Hello.txt的文件进行存储日志信息…
依此类推,最终得到上图效果!当超过五个日志文件大小存储时,会对前面刚开始写入的日志信息进行覆盖
可以将上面的index判断次数修改为85,编译运行int index = 0; while (index < 85) LOGD << "测试日志:" << index++;
之前的 Hello.4.txt 文件已经被删除了,然后被之前的Hello.3.txt给替换掉了,前面的一样会往后进行替换,最后就可以腾出新的文件Hello.txt进行继续存储了! -
使用时间作为文件名
我就比较喜欢这种命名方式了
也就是将当天的年月日作为日志的文件名,这样运行程序,每天也只会生成一个日志文件,记录当天的日志信息,也方便后期查询!#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) // 获取系统时间 - 年月日时分秒 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;
编译运行
根据当天的日期创建了日志
四、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的简单用法到这就结束了,其实plog还有很多用高效的用法,在文件夹samples中有案例,有兴趣的可以去看看!
以上是关于C/C++ plog日志简单用法的主要内容,如果未能解决你的问题,请参考以下文章