spdlog库介绍及使用方法
spdlog 是一个由Gabriel Melman开发的高速、轻量级的C++日志库,旨在提供简单易用的日志记录功能,同时保持高性能。它支持多种日志目标,包括控制台、文件、轮转文件等,允许自定义日志过滤和动态改变日志级别。该库的设计使其在多线程环境中也能安全使用,适合高负载的日志记录场景。
安装spdlog
-
通过CMake FetchContent(推荐):
cmake复制
cmake_minimum_required(VERSION 3.14) project(MyApp) set(CMAKE_CXX_STANDARD 17) include(FetchContent) FetchContent_Declare(spdlogGIT_REPOSITORY https://github.com/gabime/spdlog.gitGIT_TAG v1.11.0 ) FetchContent_MakeAvailable(spdlog)
-
手动下载:
-
从 spdlog GitHubhttps://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 MBauto 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博客