简 述: 有上一篇中通过日志调研选型,决定采用 Spdlog 后,此篇开始介绍一些基础入门,先让代码能够跑起来,放上用法示范,再去研究细节用法。
[TOC]
本文初发于 “偕臧的小站“,同步转载于此。
关联
附关联目录直达,随着后续使用,持续更新
背景
先简单看下 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()
成系列地址
欢迎 star
⭐ 和 fork
🍴 这个系列的 C++ / QT / DTK
学习,附学习由浅入深的目录,这里你可以学到如何亲自编写这类软件的经验,这是一系列完整的教程,并且永久免费!”