最近突然心血来潮,想学一下日志方面的操作。在网上找了很多日志相关的技术,最终还是决定使用plog,小巧,快速,跨平台.


一、下载plog

下载链接:https://github.com/SergiusTheBest/plog/releases

下载后解压出来,就得到了我们需要的头文件了


二、在VS中搭建plog编译环境

在vs中新建项目,根据以下图片步骤将plog头文件包含到项目中去

  1. 将include文件夹拷贝到项目路径

  2. 将头文件路径包含进来
    右键项目 - 属性 - VC++目录 - 包含目录
    将项目路径中的include路径包含进来

  3. mian函数中加入头文件

    #include <plog/Log.h>
    #include <plog/Initializers/RollingFileInitializer.h>
    

至此,plog的编译环境已经整好了,可以使用它了。


三、使用plog日志库

  1. 简单用法

    使用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_DEBUGPLOG(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 << "函数结束";
    

    编译运行后日志文件

    已经将日志信息写入文件中了!

  2. 指定日志文件大小和个数

    // 参数一:日志类型      参数二:日志文件名        参数三:日志文件大小       参数四:支持多少个日志文件
    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进行继续存储了!

  3. 使用时间作为文件名
    我就比较喜欢这种命名方式了
    也就是将当天的年月日作为日志的文件名,这样运行程序,每天也只会生成一个日志文件,记录当天的日志信息,也方便后期查询!

    #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日志简单用法相关推荐

  1. python装饰器实例-Python装饰器简单用法实例小结

    本文总结分析了Python装饰器简单用法.分享给大家供大家参考,具体如下: 装饰器在python中扮演着很重要的作用,例如插入日志等,装饰器可以为添加额外的功能同时又不影响业务函数的功能. 比如,运行 ...

  2. Spring AOP 简介以及简单用法

    Spring AOP 简介以及简单用法 如果你去面试java开发, 那么Spring的AOP和DI几乎是必问的问题. 那么AOP是什么呢? 一. AOP 所谓Aop就是 Aspect-Oriented ...

  3. slf4j的简单用法以及与log4j的区别

    From: https://www.cnblogs.com/qlqwjy/p/9275415.html 之前在项目中用的日志记录器都是log4j的日志记录器,可是到了新公司发现都是slf4j,于是想着 ...

  4. exception日志 php_PHP中错误与异常的日志记录用法分析

    本文分析了PHP中错误与异常的日志记录用法.分享给大家供大家参考,具体如下: 提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志.error 日志以及 ...

  5. 反编译工具jad简单用法

    反编译工具jad简单用法 下载地址: [url]http://58.251.57.206/down1?cid=B99584EFA6154A13E5C0B273C3876BD4CC8CE672& ...

  6. QCustomPlot的简单用法总结

    QCustomPlot的简单用法总结 第一部分:QCustomPlot的下载与安装 第二部分:QCustomPlot在VS2013+QT下的使用 QCustomPlot的简单用法总结    写在前面, ...

  7. python matplotlib 简单用法

    python matplotlib 简单用法 具体内容请参考官网 代码 import matplotlib.pyplot as plt import numpy as np # 支持中文 plt.rc ...

  8. Windump网络命令的简单用法

    Windump网络命令的简单用法 大家都知道,unix系统下有个tcpdump的抓包工具,非常好用,是做troubleshooting的好帮手.其实在windows下也有一个类似的工作,叫windum ...

  9. Android TabLayout(选项卡布局)简单用法实例分析

    本文实例讲述了Android TabLayout(选项卡布局)简单用法.分享给大家供大家参考,具体如下: 我们在应用viewpager的时候,经常会使用TabPageIndicator来与其配合.达到 ...

最新文章

  1. html div背景半透,css半透明背景实现方法
  2. 详解虚函数的实现过程之单继承(2)
  3. iOS开发 UIPanGestureRecognizer手势抽象类
  4. 【转】JMeter学习(六)集合点
  5. python判断质数用for循环_Day3.Python判断与循环语句
  6. java使用http代理访问服务器
  7. vue中ast生成render
  8. 乳腺癌检测_逻辑回归
  9. 无人机底层开发-MPU6050六轴传感器+磁力计初始化
  10. 商务部都在努力为直销行业创造良好的发展环境,你还在等什么?
  11. Mina中的zkApp交易snark
  12. 没有免费用户却飞速发展,Uber技术栈全解析!
  13. 解决线上问题-定位CPU占用过高
  14. Android App 耗电量分析-1
  15. mongodb数据同步到elasticsearch的中间件,支持全量,增量,实时同步等多种同步情景。(syncs MongoDB to Elasticsearch in realtime) (Mong
  16. 你是哪类人?愚蠢的五大基本定律
  17. 在线进行去除图片水印
  18. Android 应用程序未安装问题
  19. 2012意大利之行2:梵蒂冈圣彼得大教堂
  20. Java实现简单的UDP编程

热门文章

  1. 深情留不住,套路得人心- -聊聊套路那些事儿
  2. Fusion 360建模软件安装与使用
  3. 计算机不支持win10 1809更新,win10更新版本1809后,完全关闭系统自动更新方法,亲测可行...
  4. [iOS开发]文档导读
  5. WIZnet最新产品- WIZnet以太网帽已经正式推出
  6. 另一个好用的CSS Sprites工具(CSS雪碧)可在线引用
  7. 数字藏品平台 数字藏品交易平台
  8. 微信小程序之天气预报
  9. 「java工程师」常见面试题及其答案(持续更新)
  10. json的key中带横杠,参数无法获取