!!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!!

作者:mohist

注意:

  请选择对c++11 支持 完善的编译器, 为什么vs2013不行,因为: spdlog一直在更新,VS2013并没有完全支持C++11(踩坑总结)

 

1、准备:

  A、spdlog 源码  : https://github.com/gabime/spdlog

  B 、cmake gui:  https://cmake.org/download/

  C、vs2015 update3  or   upper: 没有下载地址? 点我

2、配置

  A、解压 spdlog 源码, 并打开解压后的文件夹,新建 build 文件夹

  B、打开 cmake, 添加源码目录 和输出目录, 见下图:

  C、点击 cmake UI的 configure.  这里演示,下面选择的的是win32。点击finish

  D、configure 完成后, 选择合适的工程, 再点击 generate生成对应的 工程文件。

  E、生成成功, 至此, 配置到此结束,

下面是使用方法: 踩坑总结:

  1、按照 文档(https://github.com/gabime/spdlog/wiki)指示, 需要将库安装到操作系统的对应文件夹下去, 上面cmake中选择生成的项目: install 可实现安装。这样, 我们就可以像使用系统库文件一样使用他们了。  优点: 方便,无需修改代码,生成解决方案即可实现安装,新手省却很多麻烦,缺点: 相比直接拷贝到项目下使用(相对路径)而言,这样的方法灵活性不佳。

  2、使用直接拷贝到项目文件夹下直接使用。优点: 方便灵活, 缺点,需要手动修改代码。

  3、提出一种解决方案来解决2中出现的问题:封装。 例如: 动态链接库 或者 自己写一个类 将其封装起来,我们再使用类或者动态链接库的接口实现记录日志。欢迎留言其他的方案。

  4、安装到系统指定目录下的方法称为: 方案1.   拷贝到项目文件夹下使用的方法称为: 方案2

-------------------------------------------------------------------------------------------------------------------------------------------------------------

方案1:

  1、打开 cmake的输出目录(我这里是在 源码解压目录下build文件夹), (注意:请使用管理员方式打开VS201X ? 因为要将文件安装到指定的系统文件夹下,没有对应的权限,程序无法执行写入)打开解决方案 spdlog.sln (以实际生成的为准)。 若上面的配置你和我选择的一样,应该会得到下图的项目:

  

  2、选择 项目:  ALL_BUILD, 右键选择生成。

  3、待上一步生成结束后, 选择 项目: INSTALL, 右键生成。 可以观察到输出窗口中 将 spdlog文件安装到系统的具体目录。

  安装结束,  回到 spdlog教程: https://github.com/gabime/spdlog/wiki/1.-QuickStart . 试试自己的第一个spdlog把。也可以阅读 源码目录下的example文件夹下的example.cpp, 总结其使用方法。

  特别说明: 使用项目执行安装,其实就是将源码目录下include下的spdlog文件夹拷贝到系统的目录下。 踩坑总结: 要想在项目中使用 #include<XXX.h>的方式包含头文件,与VS的安装路径有关,我没有尝试过默认安装VS的情况,我的VS是自定义安装路径的。

这里需要将 include下的spdlog 文件夹拷贝到VS的安装路径下,具体见下面

  我的VS安装路径:

  C:\major\development\tools\vs_install\vs_2015\

  那么需要将include下的spdlog文件夹拷贝到:

  C:\major\development\tools\vs_install\vs_2015\VC\include

  这样, 就可以在代码中使用 #include <xXX,h>的方式了

--------- 方案1安装使用结束------------------------

下面是方案2的使用。

  方案2  配置上没有 方案1复杂。只需要spdlog源码。 这里演示, 自己创建了一个空的 Visual c++ 项目, 并手动添加了一个源文件 main.cpp

  

步骤:

  1、拷贝spdlog源码解压目录下的include文件夹到当前项目文件夹下。

  2、直接在代码中对spdlog相关文件进行引用即可。

  添加头文件以用。 ( spdlog有多种记录日志的方法,这里仅 演示一种, 正在摸索其他方法)

#include "include/spdlog/spdlog.h"h"
#include "include/spdlog/sinks/rotating_file_sink.h"

  添加对 spdlog的空间引用。

using namespace spdlog;

  调用接口,记录日志:

int main()
{
// Create a file rotating logger with 5mb size max and 3 rotated files.
auto rotating_logger_a = spdlog::rotating_logger_mt("log_file_a", "logs/ra.txt", 1024 * 1024 * 5, 100); // testing
for (int i = 0; i < 1024 * 10; i++)
{
rotating_logger_a->info("index = {}", i); cout << "index = " << i << endl;
} spdlog::shutdown(); system("pause");
return 0;
}

完整源码如下:

// --------------------------------------------------------------------
// 下面是对sdplog的文件引用
#include "include/spdlog/spdlog.h"
#include "include/spdlog/cfg/env.h"
#include "include/spdlog/sinks/basic_file_sink.h"
#include "include/spdlog/sinks/rotating_file_sink.h" #include <iostream>
using namespace std;
using namespace spdlog; int main()
{
// Create a file rotating logger with 5mb size max and 3 rotated files.
auto rotating_logger_a = spdlog::rotating_logger_mt("log_file_a", "logs/ra.txt", 1024 * 1024 * 5, 100); // testing
for (int i = 0; i < 1024 * 10; i++)
{
rotating_logger_a->info("index = {}", i); cout << "index = " << i << endl;
} spdlog::shutdown(); system("pause");
return 0;
}

  3、编译 或者 ctrl + shift + B.。 发现输出 窗口中 提示错误:无法找到文件。

 重点来了:  这就是我说的, 需要手动修改代码。 双击错误提示, 定位到下图:

改为下面的代码:

#include "include/spdlog/common.h"
#include "include/spdlog/details/registry.h"
#include "include/spdlog/logger.h"
#include "include/spdlog/version.h"
#include "include/spdlog/details/synchronous_factory.h"

再次编译,  还是提示相同的错误类型, 继续按照上面的方式改。改为相对路径。因为这些文件来自 拷贝 过来的 spdlog 源码。

重复编译,改, 这样的操作。 直到编译成功如下图:

F5, 运行结果:

成功。 证明可以正常使用spdlog的相关接口了。  再来看看 演示例子输出文件夹情况:

后记:

  1、继续学习spdlog

  2、针对方案2的缺点,可以 采用封装的方法,更好的为应用程序服务

  3、偷懒: 若你也是按   方案2 操作的, 那就把 演示项目文件夹下的include下的spdlog拷贝一份。下次直接用,不用再次修改啦。   

  4、以实际的spdlog的情况为准。本文仅为参考。

windows10 下使用 spdlog 总结(spdlog 1.7)的更多相关文章

  1. Windows10下安装OpenSSL

    Windows10下安装的方法 安装环境:Windows10专业版+VS2013 工具:ActivePerl-5.22.1.2201-MSWin32-x64-299574.msi,下载地址:http: ...

  2. 【转】Windows10下80端口被PID为4的System占用导致Apache无法启动的分析与解决方案

    昨天刚更新了Windows10,总体上来说效果还是蛮不错的,然而今天在开启Apache服务器的时候却发现,Apache莫名其妙的打不开了,起初以为是权限的问题,于是使用管理员身份的控制台去调用命令ne ...

  3. 记Windows10下安装Docker的步骤

    本文主要是记录吾八哥本人在Windows10下安装Docker的过程,当然这些步骤也是在网上搜索查阅资料得知而来的!具体步骤如下: 一.启用Hyper-V 打开控制面板 - 程序和功能 - 启用或关闭 ...

  4. Windows10下安装Oracle 11g 64位的详细步骤

    直接附上我整理后的Word版<Windows10下安装Oracle 11g 64位的详细步骤>下载地址,提取码:9vak. 参考文献: 1.Win10 64位系统下安装Oracle11g详 ...

  5. windows10下 MySQL5.7.18版本安装过程及遇到的问题

    windows10下 MySQL5.7.18版本安装过程及遇到的问题           mysql-5.7.18-winx64 安装           1.解压 此次将MySQL装在H盘,依个人喜 ...

  6. windows10 下使用Pycharm2016 基于Anaconda3 Python3.6 安装Mysql驱动总结

    本文记录:在PyCharm2016.3.3 中基于Anaconda3 Python3.6版本安装Python for Mysql驱动.尝试了安装Mysql-Connector成功,但是连接数据库时驱动 ...

  7. 64位 windows10下 Apache2.4 + php7 + phpstorm 相关设置

    64位 windows10下 Apache2.4 + php7 + phpstorm 相关设置   转  https://blog.csdn.net/laurencechan/article/deta ...

  8. Windows10 下Apache服务器搭建

    Windows10 下Apache服务器搭建   转 https://blog.csdn.net/sunqian666888/article/details/78561399 目录 一.软件下载 二. ...

  9. Windows10 下安装scrapy 日志

    Windows10 下安装scrapy 日志 1.下载python3.6 2.添加python.exe和pip.exe的路径到系统环境变量path中 如c:\python36_64 C:\Python ...

  10. 解决Windows10下无法对docker容器进行端口访问(端口映射的问题)

    解决Windows10下无法对docker容器进行端口访问(端口映射的问题) 问题详情 在Windows10系统服务器中安装了docker和docker-compose 并尝试在其中运行Nginx服务 ...

随机推荐

  1. 数据库连接池配置 testOnBorrow

    背景 前段时间做系统压测,发现DB的CPU使用率飙升很严重,排查后发现是一个配置testOnBorrow由false修改为true导致.怎么对性能影响这么大?需要好好了解一下. testOnBorro ...

  2. ubuntu常见错误--Could not get lock /var/lib/dpkg/lock

    ubuntu常见错误--Could not get lock /var/lib/dpkg/lock   通过终端安装程序sudo apt-get install xxx时出错:   E: Could ...

  3. URLDNS分析

    学习了很久的Java基础,也看了很多的Java反序列化分析,现在也来分析学习哈最基础的URLDNS反序列化吧. Java反序列化基础 为了方便数据的存储,于是乎有了现在的Java序列化于反序列化.序列 ...

  4. tensorboard No dashboards are active for the current data set.

    修改一下启动命令时的路径 位置示例: 命令为   E:\PYTHON_PROJECT\testTF\inceptionV1_net\log>tensorboard --logdir=TEC4FN ...

  5. [转] Java中对数据进行加密的几种方法

    加密算法有很多种:这里只大约列举几例: 1:消息摘要:(数字指纹):既对一个任意长度的一个数据块进行计算,产生一个唯一指纹.MD5/SHA1发送给其他人你的信息和摘要,其他人用相同的加密方法得到摘要, ...

  6. 【leetcode】378. Kth Smallest Element in a Sorted Matrix(TOP k 问题)

    Given an n x n matrix where each of the rows and columns is sorted in ascending order, return the kt ...

  7. UILabel总结

    UILabel 能显示文字,不能直接通过addTarget...方法监听点击 1. 常见属性 @property(nonatomic,copy) NSString *text; 显示文字 @prope ...

  8. Servlet(3):Cookie和Session

    一. Cookie Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去.这样,web资源处理的 ...

  9. 从Rest到Graphql

    一.引言 ok,如图所示,我在去年曾经写过一篇文章<闲侃前后端分离的必要性>.嗯,我知道肯定很多人没看过.所以我做一个总结,其实啰里八嗦了一篇文章,就是想说一下现在的大型互联网项目一般是如 ...

  10. 从离线分析建模到稳健风控升级,为什么说顶象Dinsight实时风控引擎是对的选择?

    随着金融业数字化程度进一步加深,互联网垂直电商.消费金融等领域与人们生活的深度融合,数字科技在安全风险控制上已经成为了重要的基石.如何主动防范化解风险,建立智能化的实时风险监测预警体系,加速业务模式转 ...