news 2026/6/10 7:15:33

即时通讯项目--(2)spdlog二次封装

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
即时通讯项目--(2)spdlog二次封装

spdlog的二次封装:
原因:
1.避免单例的锁冲突,因此直接创建全局的线程安全的日志器进行使用
2.因为日志输出没有文件名行号,因此使用宏进行二次封装输出日志的文件名和行号
3.封装出一个初始化接口,便于使用:调试模式则输出到标准输出,否则输出到文件中
思想:
封装出一个全局接口,用户进行日志器的创建与初始化
1.初始化接口接收一个参数:运行模式-bool
2.初始化接口接收一个参数:输出文件名 -- 用于发布模式
3.初始化接口接收一个参数:输出日志等级 -- 用于发布模式
对日志输出的接口,进行宏的封装,加入文件名行号的输出

#pragma once #include <spdlog/spdlog.h> #include <spdlog/sinks/stdout_color_sinks.h> #include <spdlog/sinks/basic_file_sink.h> #include <spdlog/async.h> #include <iostream> // mode - 运行模式: true-发布模式; false调试模式 namespace im{ std::shared_ptr<spdlog::logger> g_default_logger; void init_logger(bool mode,const std::string& file,int32_t level){ if(mode == false){ // 调试模式:彩色控制台输出,最低日志等级(输出所有日志) g_default_logger = spdlog::stdout_color_mt("default-logger"); g_default_logger->set_level(spdlog::level::level_enum::trace); g_default_logger->flush_on(spdlog::level::level_enum::trace); } else{ // 发布模式:文件输出,按参数设置日志等级 g_default_logger = spdlog::basic_logger_mt("default-logger",file); g_default_logger->set_level((spdlog::level::level_enum)level); g_default_logger->flush_on((spdlog::level::level_enum)level); } // 所有模式统一设置日志输出格式 g_default_logger->set_pattern("[%n][%H:%M:%S][%t][%-8l]%v"); #define LOG_TRACE(format, ...) im::g_default_logger->trace(std::string("[{}:{}] ") + format, __FILE__, __LINE__, ##__VA_ARGS__) #define LOG_DEBUG(format, ...) im::g_default_logger->debug(std::string("[{}:{}] ") + format, __FILE__, __LINE__, ##__VA_ARGS__) #define LOG_INFO(format, ...) im::g_default_logger->info(std::string("[{}:{}] ") + format, __FILE__, __LINE__, ##__VA_ARGS__) #define LOG_WARN(format, ...) im::g_default_logger->warn(std::string("[{}:{}] ") + format, __FILE__, __LINE__, ##__VA_ARGS__) #define LOG_ERROR(format, ...) im::g_default_logger->error(std::string("[{}:{}] ") + format, __FILE__, __LINE__, ##__VA_ARGS__) #define LOG_FATAL(format, ...) im::g_default_logger->critical(std::string("[{}:{}] ") + format, __FILE__, __LINE__, ##__VA_ARGS__) } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 22:19:28

量化交易框架零基础入门指南:从痛点突破到实战落地

量化交易框架零基础入门指南&#xff1a;从痛点突破到实战落地 【免费下载链接】vnpy 基于Python的开源量化交易平台开发框架 项目地址: https://gitcode.com/vnpy/vnpy 量化交易框架作为现代金融科技的核心工具&#xff0c;正在改变传统交易的运作模式。你是否曾遇到手…

作者头像 李华
网站建设 2026/6/10 12:52:37

5个步骤解决Librosa音频处理异常:从环境配置错误到系统优化

5个步骤解决Librosa音频处理异常&#xff1a;从环境配置错误到系统优化 【免费下载链接】librosa librosa/librosa: Librosa 是Python中非常流行的声音和音乐分析库&#xff0c;提供了音频文件的加载、音调变换、节拍检测、频谱分析等功能&#xff0c;被广泛应用于音乐信息检索…

作者头像 李华
网站建设 2026/6/10 12:55:56

打造专属机器人仿真环境:NVIDIA Isaac Sim深度部署指南

打造专属机器人仿真环境&#xff1a;NVIDIA Isaac Sim深度部署指南 【免费下载链接】IsaacSim NVIDIA Isaac Sim™ is an open-source application on NVIDIA Omniverse for developing, simulating, and testing AI-driven robots in realistic virtual environments. 项目地…

作者头像 李华
网站建设 2026/6/10 12:52:35

Node版本管理与开发效率提升实战指南

Node版本管理与开发效率提升实战指南 【免费下载链接】n 项目地址: https://gitcode.com/gh_mirrors/n/n 在现代前端开发流程中&#xff0c;Node环境一致性是保障团队协作效率的核心基石。当开发人员使用不同Node版本开发同一项目时&#xff0c;常出现"本地运行正…

作者头像 李华
网站建设 2026/6/10 13:07:11

解密高效压缩:扫描文档图像优化技术指南

解密高效压缩&#xff1a;扫描文档图像优化技术指南 【免费下载链接】OCRmyPDF OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched 项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF 在数字化办公与文档管理领域&#xf…

作者头像 李华
网站建设 2026/6/10 13:12:53

vivado2023.2下载安装教程:快速理解安装目录结构与路径配置

以下是对您提供的博文《Vivado 2023.2 下载安装与环境配置深度技术解析》的 全面润色与重构版本 。本次优化严格遵循您的全部要求: ✅ 彻底去除AI痕迹,语言自然、专业、有“人味”——像一位在Xilinx一线带过多个Zynq/Versal项目的资深FPGA工程师在技术社区分享真实踩坑经…

作者头像 李华