spdlog日志库--使用案例

系列目录
spdlog日志库–基础介绍
spdlog日志库–源码解析
spdlog日志库–输出格式(fmt 库集成)
spdlog日志库–使用案例


从网上以及一些大佬对spdlog库的使用中,整理出spdlog常用的几种使用方式,供大家参考。如果哪些地方存在问题,还请大家在评论区中指出,我将更新优化,谢谢!

1. spdlog常用

用法
spdlog库的使用也非常简单,只需要下载源代码,然后把根目录下的include目录下的文件拷贝到我们的工程下,在工程中包含相应的头文件即可。

1.0 常用头文件

#include "include/spdlog/spdlog.h"
#include "include/spdlog/sinks/stdout_color_sinks.h"
//根据放置库的位置,编写对应的头文件: #include "spdlog/sinks/basic_file_sink.h"
#include "include/spdlog/sinks/basic_file_sink.h"
#include "include/spdlog/sinks/rotating_file_sink.h"
#include "include/spdlog/sinks/daily_file_sink.h"
#include "include/spdlog/sinks/dist_sink.h"
#include <afxcontrolbars.h>

#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_TRACE		//需要输出文件名和行号,必须输出这个宏
using namespace spdlog;
#include <memory>
#include <string>
#include <conio.h>

#include "spdlog/spdlog.h"
#include "spdlog/fmt/bin_to_hex.h"
#include "spdlog/fmt/bundled/core.h"
#include "spdlog/fmt/bundled/args.h"
#include "spdlog/fmt/bundled/format.h"
// 设置为智能指针类型,用于在 C++ 中管理 spdlog::logger 类型对象的生命周期
extern std::shared_ptr<spdlog::logger> myLogger;
std::shared_ptr<spdlog::logger> myLogger;

1.1 基础用法

#include "spdlog/spdlog.h"
 int main()
 {
   
  //Use the default logger (stdout, multi-threaded, colored)
  spdlog::info("Hello, {}!", "World");
 }

输出用法:
语法规则不再是过去的%d,%s这种容易出内存错误的规则。而是以 fmtlib为基准。fmtlib
spdlog输出格式详解_1

1.2 控制台打印

  #include <spdlog/spdlog.h>
  #include <string.h>
  #include <iostream>
  
  int main()
  {
   
  	// 普通打印
  	spdlog::info("Welcome to info spdlog!");
  
  	// 格式化打印
  	// 打印字符串
  	spdlog::info("Hello World {}", "spdlog!");
  	// 打印数字
  	spdlog::error("spdlog errCode : {}", -10020);
  	// 指定打印数字的占位符
  	spdlog::warn("spdlog format char {:08d}", 12);
  	// 格式化打印不同进制的数据
  	spdlog::critical("Support for int:{0:d} hex:{0:x} oct:{0:o} bin:{0:b}", 42);
  	// 打印浮点型数据
  	spdlog::info("float args are {:03.2f}", 1.23456);
  	// 打印多个参数
  	spdlog::info("string args are {0} {1}..", "too", "supported");
  	spdlog::info("number args are {0} {1} {2}..", 10020, 10040, -100);
  
  	system("pause");
  }

1.3 文件中打印

  #include <spdlog/spdlog.h>
  #include <spdlog/sinks/basic_file_sink.h>
  #include <string.h>
  #include <iostream>
  
  int main()
  {
   
  	try
  	{
   
  		// 参数1 日志标识符, 参数2 日志文件名
  		std::shared_ptr<spdlog::logger> mylogger = spdlog::basic_logger_mt("spdlog", "spdlog.log");
  		//创建按按照大小,存储的文件
  		// 参数1 日志标识符, 参数2 日志文件名, 参数3,文件大小(1024 * 1024 * 5),参数4,文件个数
		// systemLog = spdlog::rotating_logger_mt("SYS", sdLogFile, 1024 * 1024 * 5, 6);
		
  		// 设置日志格式. 参数含义: [日志标识符] [日期] [日志级别] [线程号] [数据]
  		mylogger->set_pattern("[%n][%Y-%m-%d %H:%M:%S.%e] [%l] [%t]  %v");
  		// 设置日志格式. 参数含义: [日志标识符] [日期] [日志级别] [线程号] [文件名 函数名:行号] [数据]
  		// my_logger->set_pattern("[%n] [%Y-%m-%d %H:%M:%S.%e] [%l] [%t] [%s %!:%#]  %v");

  		mylogger->set_level(spdlog::level::debug);
  		spdlog::flush_every(std::chrono::seconds(5)); // 定期刷新日志缓冲区
  
  		//日志的不同等级
  		mylogger->trace("Welcome to info spdlog!");
  		mylogger->debug("Welcome to info spdlog!");
  		mylogger->info("Welcome to info spdlog!");
  		mylogger->warn("Welcome to info spdlog!");
  		mylogger->error("Welcome to info spdlog!");
  		mylogger->critical("Welcome to info spdlog!");
  
  		// 刷新(按照日志等级)
  		mylogger->flush_on(spdlog::level::debug);
  	}
  	catch (const spdlog::spdlog_ex& ex)
  	{
   
  		std::cout << "Log initialization failed: " << ex.what() << std::endl;
  	}
  
  	system("pause");
  }

1.4 按日志大小创建文件

  // 包含此头文件
  #include <spdlog/sinks/rotating_file_sink.h>
  // 参数3:日志大小(字节)
  // 参数4:回滚数
  std::shared_ptr<spdlog::logger> file_logger = spdlog::rotating_logger_mt("spdlog", "spdlog.log", 1024, 5);

1.5 按日期创建文件

  // 包含头文件
  #include <spdlog/sinks/daily_file_sink.h>
  #include <spdlog/sinks/hourly_file_sink.h>
  
  // 按天回滚
  std::shared_ptr<spdlog::logger> dailylogger = spdlog::daily_logger_mt("daily", "daily.log");
  // 按小时回滚
  std::shared_ptr<spdlog::logger> my_logger = spdlog::hourly_logger_mt("hourly", "hourly.log"); 

1.6 按照日志等级

enum class level_enum {
   
	trace = SPDLOG_LEVEL_TRACE 0
	debug = SPDLOG_LEVEL_DEBUG 1
	info  = SPDLOG_LEVEL_INFO  2(默认输出等级)
	warn = SPDLOG_LEVEL_WARN 3
	err = SPDLOG_LEVEL_ERROR   4
	critical = SPDLOG_LEVEL_CRITICAL 5
	off  = SPDLOG_LEVEL_OFF 6
}

注:设置某个等级后,小于该等级的日志将不会被记录。
示例:

#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_DEBUG
#include "spdlog/spdlog.h"

int main()
spdlog是一个快速、异步的C++日志,支持多线程和跨平台,具有简单易用的接口和高性能的日志记录能力。以下是spdlog的一些主要特点: 1. 快速:spdlog使用高效的缓冲区实现快速的日志记录,可以轻松处理高负载的日志记录场景。 2. 异步:spdlog支持异步日志记录,可以将日志写入缓冲区后立即返回,不会阻塞主线程。 3. 多线程:spdlog可以安全地在多个线程使用,支持多个线程同时进行日志记录,且不需要额外的同步机制。 4. 跨平台:spdlog可以在多个平台上运行,包括Windows、Linux、OS X等。 5. 简单易用:spdlog提供简洁明了的API,可以轻松地实现日志记录功能。 以下是spdlog使用示例: ```cpp #include "spdlog/spdlog.h" void log_example() { // 创建一个控制台日志记录器 auto console = spdlog::stdout_color_mt("console"); // 创建一个文件日志记录器 auto file = spdlog::basic_logger_mt("file_logger", "logs/mylogfile.txt"); // 设置日志记录级别 console->set_level(spdlog::level::info); file->set_level(spdlog::level::trace); // 记录日志 console->info("Hello, spdlog!"); file->trace("This is a trace message."); } ``` 以上代码演示了如何创建一个控制台日志记录器和一个文件日志记录器,并设置不同的日志记录级别,最后分别记录了一条信息和一条跟踪信息。 更多关于spdlog使用说明,请参考spdlog的官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值