spdlog日志库
1.介绍:
Spdlog是一个快速、异步、跨平台、易于使用的C++日志库,旨在提供高性能、易用性和灵活性。它支持多线程环境和异步记录,支持多种日志级别和多个后端(如控制台、文件、网络等),并提供灵活的日志格式化选项。
以下是Spdlog的一些主要特点:
-
快速和异步记录:Spdlog使用内存映射文件和异步日志记录等技术,以提高日志记录的效率和性能。这意味着日志记录不会阻塞主线程,从而提高应用程序的吞吐量和响应速度。
-
多线程支持:Spdlog支持多线程环境,并提供了线程安全的日志记录。它通过使用互斥锁来保护共享资源,从而避免了多线程并发访问的问题。
-
多种日志级别:Spdlog支持多种日志级别,如trace、debug、info、warning、error和critical等。这些级别可以方便地控制日志记录的详细程度。
-
多个后端支持:Spdlog支持多个后端,包括控制台、文件、网络等。这些后端可以方便地进行配置和切换。
-
灵活的格式化选项:Spdlog提供了灵活的日志格式化选项,可以定制化地满足不同需求。它支持使用格式化字符串和用户自定义格式化器等方式来格式化日志记录。
-
跨平台支持:Spdlog可以在Windows、Linux、macOS等多个平台上运行,并提供了一致的API。这意味着您可以轻松地将Spdlog集成到您的跨平台应用程序中。
2.如何使用:
下载:
-
通过GitHub获取源代码:https://github.com/gabime/spdlog/releases
在该页面上,您可以找到Spdlog库的各个版本的源代码包,包括压缩文件和tarball。您可以选择下载相应的版本,并将其解压到您的项目文件夹中。
-
使用包管理器下载
在Ubuntu系统中,您可以使用以下命令安装Spdlog库:
sudo apt-get install libspdlog-dev
安装:
- 首先将下载好的spdlog源代码解压缩到需要使用的目录下
- 进入下载的spdlog目录
cd spdlog
- 使用CMake进行构建和安装。创建一个构建目录,然后执行CMake命令:
mkdir build
cd build
cmake ..
make
sudo make install
- 安装完成后,spdlog库将被安装到系统的默认位置。
3.常用函数
在spdlog库中,有一些常用的函数可用于进行日志记录和配置。以下是一些常见的spdlog函数:
-
spdlog::info()/spdlog::debug()/spdlog::warn()/spdlog::error():这些函数用于记录不同级别的日志消息。例如,
spdlog::info("This is an info message")
会记录一条信息级别的日志消息。 -
spdlog::set_level():该函数用于设置全局日志级别。可以通过传递
spdlog::level::level_enum
枚举值来设置不同的日志级别,如spdlog::set_level(spdlog::level::debug)
将日志级别设置为调试。 -
spdlog::set_pattern():该函数用于设置日志消息的格式模式。可以使用占位符来定义日志消息的输出格式,如
%^[%Y-%m-%d %H:%M:%S.%e] [%n] [%l]%$ %v
。%^ 和 %$ 是用于设置终端颜色的特殊标记。[%Y-%m-%d %H:%M:%S.%e] 表示日期和时间信息,[%n] 表示日志记录器名称,[%l] 表示日志级别,%v 表示日志消息的内容。
-
spdlog::set_default_logger():该函数用于设置默认的日志记录器。一旦设置了默认记录器,就可以使用全局的spdlog函数来记录日志,而无需传递记录器实例。例如,
spdlog::info("This is a message using the default logger")
。 -
spdlog::stdout_color_mt():该函数创建一个输出到标准输出的多线程日志记录器。例如,
auto logger = spdlog::stdout_color_mt("console_logger")
创建一个名为 “console_logger” 的记录器。 -
spdlog::rotating_logger_mt():该函数创建一个多线程的日志记录器,可以将日志消息写入轮转的文件中。例如,
auto logger = spdlog::rotating_logger_mt("file_logger", "logs.log", 1024 * 1024 * 5, 3)
创建一个名为 “file_logger” 的记录器,将日志消息写入名为 “logs.log” 的文件中,最大文件大小为 5MB,最多保留 3 个文件。 -
spdlog::basic_logger_mt():该函数创建一个写入到文件的基本日志记录器。例如,
auto logger1 = spdlog::basic_logger_mt("basic_logger", "logs/basic-log.txt")
创建一个名为"basic_logger"的记录器,将日志消息写入名为"logs/basic-log.txt"的文件中。
这些函数只是spdlog库中的一小部分功能。spdlog还提供了许多其他功能,如多线程安全、异步日志记录、自定义记录器等。你可以查阅spdlog的文档以获取完整的函数列表和更详细的用法说明。
#include <spdlog/spdlog.h>
#include <spdlog/sinks/basic_file_sink.h>
int main() {
// 设置日志级别为调试
spdlog::set_level(spdlog::level::debug);
// 设置日志消息的格式模式
spdlog::set_pattern("%^[%Y-%m-%d %H:%M:%S.%e] [%n] [%l]%$ %v");
// 创建一个输出到标准输出的多线程日志记录器
auto console_logger = spdlog::stdout_color_mt("console_logger");
// 创建一个写入到文件的日志记录器,最大文件大小为5MB,最多保留3个文件
auto file_logger = spdlog::rotating_logger_mt("file_logger", "logs.log", 1024 * 1024 * 5, 3);
// 设置默认的日志记录器
spdlog::set_default_logger(console_logger);
// 使用默认的日志记录器记录不同级别的日志消息
spdlog::info("This is an info message");
spdlog::debug("This is a debug message");
spdlog::warn("This is a warning message");
spdlog::error("This is an error message");
// 使用特定的日志记录器记录日志消息
console_logger->info("This is a message using the console_logger");
file_logger->info("This is a message using the file_logger");
return 0;
}