当前位置: 首页 > news >正文

【C++】开源:spdlog跨平台日志库配置使用

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍spdlog日志库配置使用。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. 项目介绍
    • :blush:2. 环境配置
    • :satisfied:3. 使用说明

😏1. 项目介绍

项目Github地址:https://github.com/gabime/spdlog

Spdlog 是一个高性能的 C++ 日志库,具有简单易用的 API 和灵活的配置选项。它被设计成易于集成到现有项目中,并提供了多种日志记录器(loggers)、格式化选项和多线程安全的操作。

下面是一些关于 Spdlog 的主要特点和功能:

1.简单易用:Spdlog 提供简洁的 API,使得日志记录变得非常容易。你只需要包含头文件,并使用简单的方法调用即可输出日志。

2.多种日志目标:Spdlog 支持多种日志目标,可以将日志记录到控制台、文件、网络等不同的位置。你可以根据需求选择适合的日志目标。

3.灵活的格式化:Spdlog 具有灵活的日志格式化选项,可以自定义日志的输出格式。你可以按照自己的需求定义日期、时间、日志级别和其他附加信息的格式。

4.多线程支持:Spdlog 在设计上考虑到多线程环境下的安全性,可以在多个线程中同时记录日志,而无需担心竞争条件。

5.高性能:Spdlog 使用异步日志记录方式和高效的写入策略,以提供卓越的性能。它可以处理大量的日志消息而不会对应用程序的性能产生显著影响。

6.支持不同的日志级别:Spdlog 提供了不同的日志级别(如 DEBUG、INFO、WARNING、ERROR 等),可以根据需求选择适当的级别进行日志记录,以帮助你更好地控制日志输出。

7.集成第三方库:Spdlog 可以与其他流行的 C++ 库和框架集成,如 fmtlib、Google Protocol Buffers (protobuf) 等。

8.跨平台支持:Spdlog 支持在多个操作系统和编译器上运行,包括 Windows、Linux 和 macOS。它可以无缝地在不同平台上提供一致的 API 和功能。

😊2. 环境配置

下面进行环境配置:

# apt安装
sudo apt install libspdlog-dev
# 编译
g++ -o main main.cpp -lspdlog && ./main# cmake配置
cmake_minimum_required(VERSION 3.0)
project(YourProject)find_package(spdlog REQUIRED)add_executable(YourExecutable your_source_files.cpp)
target_link_libraries(YourExecutable PRIVATE spdlog::spdlog)

😆3. 使用说明

下面进行使用分析:

最简示例:

#include <spdlog/spdlog.h>int main() {// 设置日志级别为 DEBUGspdlog::set_level(spdlog::level::debug);// 输出不同级别的日志spdlog::debug("This is a debug message");spdlog::info("This is an info message");spdlog::warn("This is a warning message");spdlog::error("This is an error message");return 0;
}

设置两个logger,分别输出在终端和日志文件中:

#include <iostream>
#include <spdlog/spdlog.h>
#include "spdlog/sinks/basic_file_sink.h"
#include "spdlog/sinks/stdout_color_sinks.h"int main()
{std::cout << "spdlog start" << std::endl;// 创建一个名为 "logger" 的loggerauto console = spdlog::stdout_color_mt("logger");// 创建一个名为 "logger_2" 的loggerauto file = spdlog::basic_logger_mt("logger_2", "logs/basic-log.txt");// 设置日志级别为 infoconsole->set_level(spdlog::level::debug);file->set_level(spdlog::level::info);// 输出不同级别的日志console->debug("This is debug message");console->info("Welcome to spdlog!");console->error("Some error message with arg{}", 1);file->info("Welcome to spdlog, from a file!");file->error("Some error message with arg{}", 2);std::cout << "spdlog end" << std::endl;return 0;
}

在这里插入图片描述

以上。

相关文章:

【C++】开源:spdlog跨平台日志库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍spdlog日志库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…...

[Azkaban] No active executors found

没有找到活动的executors&#xff0c;需在MySQL数据库里设置端口为12321的executors表的active为1&#xff1a; select * from executors;如果显示active0 则需要进行处理&#xff1a; update azkaban.executors set active1;当active0&#xff0c;更新为1时&#xff0c;用 n…...

无涯教程-Perl - recv函数

描述 This function receives a message on SOCKET attempting to read LENGTH bytes, placing the data read into variable SCALAR.The FLAGS argument takes the same values as the recvfrom( ) system function, on which the function is based. When communicating wit…...

算法练习-搜索 相关

文章目录 迷宫问题 迷宫问题 定义一个二维数组 m行 * n列 &#xff0c;如 4 5 数组下所示&#xff1a; int arr[5][5] { 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, }; 它表示一个迷宫&#xff0c;1表示墙壁&#xff0c;0表示可以走的路&#xff0c;只…...

PyQt5控件布局管理

Qt Designer提供了四种窗口布局&#xff1a;Vertical Layout(垂直布局) &#xff0c;Horizontal Layout(水平布局)&#xff0c;Grid Layout(栅格布局)&#xff0c;Form Layout(表单布局)&#xff0c;以及一种隐藏的布局—绝对布局 一般进行布局有两种方式&#xff1a; 一是通…...

TypeScript 一分钟让你理解泛型是什么

TypeScript 一分钟让你理解 泛型是什么 TS的泛型是指在定义函数、接口或类型时&#xff0c;不预先指定具体的类型&#xff0c;而是在使用时指定类型限制的一种特性。 泛型和函数中的参数比较类似&#xff0c;我们定义一个函数的时候有时会给它留一个参数名&#xff0c;在使用这…...

PatchMatchNet 训练dtu数据集、训练曲线查看、实操教程图图文详解、

文章目录 1 查看要求 下载数据集2 训练2.1 路径配置2.2 训练2.3 模型输出 与 训练曲线查看2.4 输出训练 log文件1 查看要求 下载数据集 在代码文件加下打开 README.md文件找到训练说明,查看那要求、下载训练集、训练方法 ## Training Download pre-processed [DTUs trainin…...

怎样制定测试计划和设计测试用例?

测试工作贯穿于整个软件开发生命周期&#xff0c;是一项庞大而复杂的工作&#xff0c;需要制订一个完整且详细的测试计划作为指导。测试计划是整个测试工作的导航图&#xff0c;但它并不是一成不变的&#xff0c;随着项目推进或需求变更&#xff0c;测试计划也会不断发生改变&a…...

教你如何为博客网站申请阿里云的免费域名HTTPS证书

如何为博客网站申请阿里云的免费域名HTTPS证书 文章目录 如何为博客网站申请阿里云的免费域名HTTPS证书前置条件&#xff1a;步骤1 例如阿里云控制台&#xff0c;选择SSL证书步骤2 申请购买免费证书步骤3 创建证书步骤3.1 证书申请步骤3.2 DNS域名验证 步骤4 等待证书审核成功&…...

在线Word怎么转换成PDF?Word无法转换成PDF文档原因分析

不同的文件格式使用方法是不一样的&#xff0c;而且也需要使用不同的工具才可以打开编辑内容&#xff0c;针对不同的场合用户们难免会用到各种各样的文件格式&#xff0c;要想在不修改内容的前提下提高工作效率&#xff0c;那就需要用到文件格式转换&#xff0c;那么在线Word怎…...

计算机网络:网络通信相关概念入门

目录 一、网络发展背景二、理解网络通信三、理解IP地址1.简述IP地址2.IP地址的版本3.提高地址利用率的技术 四、理解端口1.简述端口2.使用端口的原因 五、理解网络通信协议 一、网络发展背景 网络发展背景&#xff1a; 最初的计算机是单机&#xff0c;那么单机是这样传输数据的…...

Spring-2-透彻理解Spring 注解方式创建Bean--IOC

今日目标 学习使用XML配置第三方Bean 掌握纯注解开发定义Bean对象 掌握纯注解开发IOC模式 1. 第三方资源配置管理 说明&#xff1a;以管理DataSource连接池对象为例讲解第三方资源配置管理 1.1 XML管理Druid连接池(第三方Bean)对象【重点】 数据库准备 -- 创建数据库 create …...

LeetCode150道面试经典题--单词规律(简单)

1.题目 给定一种规律 pattern 和一个字符串 s &#xff0c;判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配&#xff0c;例如&#xff0c; pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 2.示例 pattern"abba" s "c…...

uniapp把城市换成26个字母和城市排序

后端返回的数据 我们要得效果 <template><view><view v-for"(value,key) in cities" :key"key"><view style"color: red;"> {{ key }} </view><view style"border: 1rpx solid black;"><tex…...

Flv格式视频怎么转MP4?视频格式转换方法分享

FLV格式的视频是一种早期的视频格式&#xff0c;不支持更高的分辨率和比特率&#xff0c;这意味着视频的清晰度和质量受限制&#xff0c;无法很好地保留细节和质量&#xff0c;这种格式的视频已经逐渐被更高质量的视频格式所替代&#xff0c;例如MP4格式&#xff0c;不仅具有很…...

Java类与对象详解(3)

目录 封装 封装的概念 访问限定符 封装扩展之包 包的概念 导入包中的类 自定义包 基本规则 包的访问权限控制举例 常见的包 static 成员 static 修饰成员变量 static修饰成员方法 static 成员变量的初始化 代码块 代码块的概念及其分类 普通代码块 构造代码块…...

PMP备考指南来啦!

第一步&#xff1a;通读教材&#xff0c;了解学习内容 在正式开始课程的学习前&#xff0c;可以先快速简单地阅览一遍教材&#xff08;PMBOK&#xff09;&#xff0c;在较短的时间内知道自己将要学习的是什么内容&#xff1b;同时可以标记出难理解的知识点。这样做有以下两个好…...

计算机视觉中的特征检测和描述

一、说明 这篇文章是关于计算机视觉中特征检测和描述概念的简要理解。在其中&#xff0c;我们探讨了它们的定义、常用技术、简单的 python 实现和一些限制。 二、什么是特征检测和描述&#xff1f; 特征检测和描述是计算机视觉中的基本概念&#xff0c;在图像识别、对象跟踪和图…...

【docker】 运行bytetrack 构建映像失败 使用docker删除之前构建的映像

1 Docker删除docker build失败的images docker images | grep "<none>" | awk {print $3} | xargs docker rmi 2 Docker删除启动失败的image docker ps -a | awk {if (length($2) 12){print $1}} | xargs docker rm...

视图矩阵推导

线性代数知识背景 空间中对边向量相等的四边形是平行四边形 视图矩阵推导...

verilog中的、、有什么区别和联系?

在 Verilog 中,&、&& 和 &&& 都是逻辑运算符,但它们在操作的对象和行为上有显著的不同。 1. & (按位与运算符,bitwise AND) 用途:& 是按位与运算符,用于对两个操作数的每一位执行 AND 运算。 操作对象:它对每个操作数的 每一位 执行逻…...

蓝桥杯10天备战-day3基础算法

二分&#xff1a;int xxlower_bound(a,an,x)-a;返回>x的指针&#xff0c;减去a才是下标int yyupper_bound(a,an,x)-a;二分万能模板&#xff1a;#include<bits/stdc.h> using namespace std; #define int long long int a[10000]; int n, m; bool isblue(int mid) {if …...

深度学习项目训练环境低资源优化:支持梯度检查点+混合精度,RTX 3090显存省35%

深度学习项目训练环境低资源优化&#xff1a;支持梯度检查点混合精度&#xff0c;RTX 3090显存省35% 1. 环境准备与快速上手 1.1 开箱即用的深度学习环境 这个深度学习训练镜像已经预装了完整的开发环境&#xff0c;基于PyTorch 1.13.0和CUDA 11.6构建&#xff0c;包含了训练…...

Golang如何做Helm Chart_Golang Helm教程【秒懂】

Go二进制在scratch/alpine镜像报“no such file or directory”是因CGO默认启用导致动态链接libc&#xff0c;需禁用CGO并静态编译&#xff1b;Helm配置须统一管理探针路径、环境变量、镜像tag等四端一致。Go二进制进镜像总报 no such file or directory&#xff1f;不是镜像没…...

PynamoDB事务处理指南:确保数据一致性的终极方案

PynamoDB事务处理指南&#xff1a;确保数据一致性的终极方案 【免费下载链接】PynamoDB A pythonic interface to Amazons DynamoDB 项目地址: https://gitcode.com/gh_mirrors/py/PynamoDB PynamoDB作为Python开发者操作Amazon DynamoDB的高效工具&#xff0c;提供了强…...

HY-Motion 1.0应用案例:快速制作3D健身教练教学视频

HY-Motion 1.0应用案例&#xff1a;快速制作3D健身教练教学视频 1. 从创意到成片&#xff1a;一个健身教练的“AI分身”诞生记 想象一下这个场景&#xff1a;你是一家在线健身平台的课程策划&#xff0c;下个月要上线一套全新的“办公室肩颈放松操”。传统的制作流程是什么&a…...

千问3.5-2B部署案例:CSDN GPU平台一键启用,7860端口服务管理全命令解析

千问3.5-2B部署案例&#xff1a;CSDN GPU平台一键启用&#xff0c;7860端口服务管理全命令解析 1. 千问3.5-2B模型简介 千问3.5-2B是Qwen系列中的小型视觉语言模型&#xff0c;它能够同时理解图片内容和处理自然语言。这个模型特别适合需要结合视觉和语言理解的应用场景。 与…...

Pretext:值得关注的文本排版引擎骨

一、语言特性&#xff1a;Java 26 与模式匹配进化 1.1 Java 26 语言级别支持 IDEA 2026.1 EAP 最引人注目的变化之一&#xff0c;就是新增 Java 26 语言级别支持。这意味着开发者可以提前体验和测试即将在 JDK 26 中正式发布的语言特性。 其中最重要的变化是对 JEP 530 的全面支…...

状态反馈极点配置实战:从可控性判断到反馈增益计算

1. 状态反馈极点配置入门指南 第一次接触状态反馈极点配置时&#xff0c;我也被那些专业术语搞得晕头转向。但后来发现&#xff0c;这其实就是给系统"调音"的过程 - 就像给音响设备调整高低音旋钮一样&#xff0c;我们可以通过调整反馈增益来改变系统的动态特性。 为…...

C#怎么使用ArraySegment和切片 C#如何用Range和Index对数组和字符串进行切片操作【语法】

<p>ArraySegment 是仅记录起始位置和长度的数组视图&#xff0c;不复制数据、无内存安全检查&#xff0c;越界不抛异常&#xff1b;Range/ Index 是 C# 8.0 语法糖&#xff0c;依赖类型实现对应索引器&#xff0c;字符串切片需防代理对越界。</p>ArraySegment 不是…...