简 述:上一篇中通过日志调研选型,决定采用 Spdlog 后,此篇开始介绍一些基础入门,先让代码能够跑起来,放上用法示范,再去研究细节用法。

[TOC]


本文初发于 “偕臧的小站“,同步转载于此。


关联

  附关联目录直达,随着后续使用,持续更新

  1. Log:日志选型调研『一』
  2. Log:日志之 Spdlog 极简用法示范『二』
  3. Log:日志之 Spdlog 核心构成『三』

背景

  先简单看下 spdlog 的官方介绍:

Very fast, header-only/compiled, C++ logging library。


我使用它的理由:

  • GitHub 高达 14K ⭐

  • 稳定至今的维护且更新

  • 跨平台支持(Linux / Windows / MacOS / Android / 等 )

  • 采用现代的 C++ 11 语法,简单易用;只需包含其头文件即可

  • 宽松的 MIT 许可证,就连其依赖的 fmt lib 库亦是采用 MIT 许可证;

  • 完整的 wiki 用法文档

  • 支持多种日志:滚动文本、多文本、带颜色的终端输出

  • 使用简单,且性能高;可在运行、编译时刻修改日志等级


用法示范

  演示一下在 CMake 使用 spdlog ,个人的仅包含头文件用法 ,分别默认输出到在终端和文本文件的用法。此方式不需要编译安装 spdlog 到本机。

  先新建一个 Qt GUI 的 CMake 项目,使用 MSVC 套件编译运行显示一个窗口,准备工作做好了 见提交 #8914eb


spdlog 输出到终端

ExPicShot 根目下执行下载 spdlog 库

git submodule add https://github.com/gabime/spdlog.git ./3rdparty/spdlog

CMakeLists.txt 中添加一行

include_directories(3rdparty/spdlog/include)

再在 main.cpp 添加测试代码

#include "widget.h"

#include <QApplication>
#include "spdlog/spdlog.h"

int main(int argc, char *argv[])
{    
    QApplication a(argc, argv);

    spdlog::info("Welcome to spdlog!");
    spdlog::error("Some error message with arg: {}", 1);

    spdlog::warn("Easy padding in numbers like {:08d}", 12);
    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin: {0:b}", 42);
    spdlog::info("Support for floats {:03.2f}", 1.23456);
    spdlog::info("Positional args are {1} {0}..", "too", "supported");
    spdlog::info("{:<30}", "left aligned");

    Widget w;
    w.show();
    return a.exec();
}

运行,即可看到使用默认的彩色格式,默认输出到控制台中 见提交#654264331。。


spdlog 输出到文件

若是更改为写入 .txt 中,可改写为

#include "widget.h"

#include <QApplication>
#include "spdlog/spdlog.h"

int main(int argc, char *argv[])
{    
    QApplication a(argc, argv);

    spdlog::info("Welcome to spdlog!");
    spdlog::error("Some error message with arg: {}", 1);

    spdlog::warn("Easy padding in numbers like {:08d}", 12);
    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin: {0:b}", 42);
    spdlog::info("Support for floats {:03.2f}", 1.23456);
    spdlog::info("Positional args are {1} {0}..", "too", "supported");
    spdlog::info("{:<30}", "left aligned");

    Widget w;
    w.show();
    return a.exec();
}

运行后显示 见提交 #3e203c345cb5



其它用法

  在 官网文档 说的很清楚 链接二进制 方式和包含头文件路径方式如下;略麻烦是需要对 spdlog 项目进行编译安装作为前提。 还是看个人实际使用去需求。

# Copyright(c) 2019 spdlog authors Distributed under the MIT License (http://opensource.org/licenses/MIT)

cmake_minimum_required(VERSION 3.10)
project(spdlog_examples CXX)

if(NOT TARGET spdlog)
    # Stand-alone build
    find_package(spdlog REQUIRED)
endif()

# ---------------------------------------------------------------------------------------
# Example of using pre-compiled library
# ---------------------------------------------------------------------------------------
add_executable(example example.cpp)
target_link_libraries(example PRIVATE spdlog::spdlog)

# ---------------------------------------------------------------------------------------
# Example of using header-only library
# ---------------------------------------------------------------------------------------
if(SPDLOG_BUILD_EXAMPLE_HO)
    add_executable(example_header_only example.cpp)
    target_link_libraries(example_header_only PRIVATE spdlog::spdlog_header_only)
endif()

成系列地址

QtExamples

欢迎 star ⭐ 和 fork 🍴 这个系列的 C++ / QT / DTK 学习,附学习由浅入深的目录,这里你可以学到如何亲自编写这类软件的经验,这是一系列完整的教程,并且永久免费!”