spdlog日志库使用

599 阅读1分钟

spdlog简介

spdlog是一款高效的C++日志库,spdlog支持异步和同步日志记录。

编译安装

克隆项目

git clone https://github.com/gabime/spdlog.git

编译

cd spdlog
mkdir build
cd build
cmake ..
make -j`nproc`

安装

make install

使用实例代码

打印一行日志

代码

#include <spdlog/spdlog.h>

int main() {

  // 打印一行日志
  spdlog::info("hello world");

  return 0;
}

编译

g++ main.cpp -o main -std=c++14 -lpthread -I/usr/local/include/

运行测试

08:08:52 root@asus spdlog_test → ./main 
[2024-11-03 08:08:56.346] [info] hello world

一些常用的方法

代码

#include <spdlog/spdlog.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/sinks/basic_file_sink.h>
#include <spdlog/async.h>
#include <spdlog/async_logger.h>
#include <spdlog/sinks/base_sink.h>

int main() {

  // 打印一行日志
  spdlog::info("hello world");

  // 使用工厂方法进行实现,创建异步的logger
  auto logger = spdlog::stdout_color_mt<spdlog::async_factory>("console");

  logger->info("hello hello");

  // 可以通过logger的名称获取指定的logger,然后打印日志
  spdlog::get("console")->info("hello hello hello");


  // 手动创建logger
  // 该方式的好处是可以携带多个sink

  // 创建一个sink
  auto sink1 = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();

  // 创建一个输出到文件的sink
  auto sink2 = std::make_shared<spdlog::sinks::basic_file_sink_mt>("test.txt");

  // 设置日志格式
  sink2->set_pattern("[%^%l%$] %v");
  
  // 创建logger
  auto logger1 = std::make_shared<spdlog::logger>(std::string("sonsole1"));

  // 一个logger可以携带多个sink
  logger1->sinks().push_back(sink1);
  logger1->sinks().push_back(sink2);

  // 将logger注册到registory中
  spdlog::register_logger(logger1);


  // 使用logger1
  logger1->info("hello console1");

  return 0;
}

运行测试

09:17:24 root@asus spdlog_test → ./main 
[2024-11-03 09:17:27.818] [info] hello world
[2024-11-03 09:17:27.821] [console] [info] hello hello
[2024-11-03 09:17:27.821] [console] [info] hello hello hello
[2024-11-03 09:17:27.821] [sonsole1] [info] hello console1

image.png