windows10 下使用 spdlog 總結(spdlog 1.7)


 

!!版權聲明:本文為博主原創文章,版權歸原文作者和博客園共有,謝絕任何形式的 轉載!!

作者: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的情況為准。本文僅為參考。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM