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

C++高性能日志库spdlog实战

spdlog库介绍及使用方法

spdlog 是一个由Gabriel Melman开发的高速、轻量级的C++日志库,旨在提供简单易用的日志记录功能,同时保持高性能。它支持多种日志目标,包括控制台、文件、轮转文件等,允许自定义日志过滤和动态改变日志级别。该库的设计使其在多线程环境中也能安全使用,适合高负载的日志记录场景。

安装spdlog
  1. 通过CMake FetchContent(推荐):

    cmake复制

    cmake_minimum_required(VERSION 3.14)
    project(MyApp)
    set(CMAKE_CXX_STANDARD 17)
    include(FetchContent)
    FetchContent_Declare(
        spdlog
        GIT_REPOSITORY https://github.com/gabime/spdlog.git
        GIT_TAG        v1.11.0
    )
    FetchContent_MakeAvailable(spdlog)
  2. 手动下载

    • spdlog GitHubicon-default.png?t=O83Ahttps://github.com/gabime/spdlog 下载最新版本。

    • include 目录复制到项目中,并在 CMakeLists.txt 中添加相应的包含路径。

基本使用示例

以下是如何在控制台打印日志的简单示例:

cpp复制

#include <spdlog/spdlog.h>

int main() {
    spdlog::info("欢迎使用spdlog!");  // 输出信息
    spdlog::error("这是一个错误消息!");  // 输出错误
    return 0;
}
文件日志记录

要将日志记录到文件,可以使用 basic_logger_mt

cpp复制

#include <spdlog/spdlog.h>
#include <spdlog/sinks/basic_file_sink.h>

int main() {
    try {
        auto logger = spdlog::basic_logger_mt("basic_logger", "logs/basic-log.txt");
        logger->info("这是一个信息日志");
        logger->error("这是一个错误日志");
    } catch (const spdlog::spdlog_ex& ex) {
        std::cout << "日志初始化失败: " << ex.what() << std::endl;
    }
    return 0;
}
轮转日志记录

对于需要定期备份的日志文件,可以使用 rotating_logger_mt

cpp复制

#include <spdlog/sinks/rotating_file_sink.h>

int main() {
    auto max_size = 1024 * 1024 * 5; // 5 MB
    auto max_files = 3; // 最多保留3个文件
    auto logger = spdlog::rotating_logger_mt("rotating_logger", "logs/rotating.txt", max_size, max_files);
    logger->info("这是一个轮转日志示例");
    return 0;
}

项目实战

#ifndef LOG_H
#define LOG_H

#include <spdlog/logger.h>
#include <spdlog/sinks/rotating_file_sink.h>
#include <sodlog/spdlog.h>

class Log
{
public:
    static std::shared_ptr<spdlog::logger> getLog()
    {
        static Log log;
        return spdlog::get("basic_logger");
    }

private:
    Log()
    {
        auto max_size = 1048576 * 500;
        auto max_files = 3;
        auto logger = spdlog::rotating_logger_mt("basic_logger", "log/rotating.txt", max_size, max_files);
        logger->setpattern("[%n][%Y-%m-%d %H:%M:%S.%e] [%l] [%t] %v");
    }
}

#endif

使用示例

#include "log.h"

int a = 1;
Log::getLog()->info("hahahahha : {}", a);

高级配置

spdlog还支持异步日志记录和多种输出目标,可以根据项目需求进行配置。你可以设置日志格式、日志级别等,具体方法可以参考官方文档。

总结

spdlog是一个功能强大且易于使用的C++日志库,适合各种项目开发需求。通过简单的配置和代码,你可以轻松实现高效的日志记录功能,提升项目的可维护性和调试效率。

参考:

C++高性能日志库spdlog使用指南-CSDN博客


http://www.kler.cn/a/488919.html

相关文章:

  • C++感受15-Hello STL 泛型启蒙
  • 前端数据模拟器 mockjs 和 fakerjs
  • Qt实现海康OSD拖动Demo
  • 阿里巴巴1688 API接口深度解析:商品详情获取与按图搜索商品(拍立淘)实用指南
  • Python使用pip安装Caused by SSLError:certificate verify failed
  • 【DNS 阿里云,域名解析,解析到IP的指定端口】
  • Three.js 渲染技术:打造逼真3D体验的幕后功臣
  • 新能源网站提升用户体验的关键
  • 字节小米等后端岗位C++面试题
  • 音视频入门基础:RTP专题(1)——RTP官方文档下载
  • linux创建服务,实现程序异常退出自启
  • npm发布流程说明
  • 创建和管理表
  • Vue3的reactive、ref、toRefs、toRef、toRaw 和 markRaw处理响应式数据区别
  • 科技盛宴CES Asia 2025,企业创新活力尽显
  • uniapp路由跳转+二级页面详情跳转保留当前页方法教程
  • Win11远程桌面怎么设置?
  • CAS操作的底层原理(总线锁定机制和缓存锁定机制 )
  • SpringBoot 原理篇(day14)
  • 【python自写包模块的标准化方法】