news 2026/3/21 15:46:50

即时通讯项目--(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/3/14 13:23:08

中文语音识别实战:基于Paraformer镜像实现会议录音转文字全流程

中文语音识别实战&#xff1a;基于Paraformer镜像实现会议录音转文字全流程 在日常工作中&#xff0c;你是否经历过这样的场景&#xff1a;一场两小时的项目会议结束&#xff0c;却要花三小时逐字整理会议纪要&#xff1f;一份客户访谈录音&#xff0c;反复听十几遍仍漏掉关键…

作者头像 李华
网站建设 2026/3/18 14:14:39

Paraformer-large多通道音频处理:立体声分离转写实战教程

Paraformer-large多通道音频处理&#xff1a;立体声分离转写实战教程 1. 为什么需要多通道音频处理&#xff1f; 你有没有遇到过这样的情况&#xff1a;一段会议录音&#xff0c;左右声道分别录了主持人和嘉宾的声音&#xff0c;或者一段采访素材里&#xff0c;人声和环境噪音…

作者头像 李华
网站建设 2026/3/21 13:34:30

3步突破鸿蒙远程调试瓶颈:HOScrcpy低延迟投屏方案全解析

3步突破鸿蒙远程调试瓶颈&#xff1a;HOScrcpy低延迟投屏方案全解析 【免费下载链接】鸿蒙远程真机工具 该工具主要提供鸿蒙系统下基于视频流的投屏功能&#xff0c;帧率基本持平真机帧率&#xff0c;达到远程真机的效果。 项目地址: https://gitcode.com/OpenHarmonyToolkit…

作者头像 李华
网站建设 2026/3/13 19:08:51

3步保存B站高清视频:面向内容创作者的Bilidown效率工具

3步保存B站高清视频&#xff1a;面向内容创作者的Bilidown效率工具 【免费下载链接】bilidown 哔哩哔哩视频解析下载工具&#xff0c;支持 8K 视频、Hi-Res 音频、杜比视界下载、批量解析&#xff0c;可扫码登录&#xff0c;常驻托盘。 项目地址: https://gitcode.com/gh_mir…

作者头像 李华
网站建设 2026/3/15 22:05:35

三极管工作状态核心要点:快速理解放大与开关模式

以下是对您提供的博文《三极管工作状态核心要点:快速理解放大与开关模式》的 深度润色与专业重构版本 。本次优化严格遵循您的全部要求: ✅ 彻底去除AI痕迹,语言自然、老练、有“人味”,像一位在实验室摸爬滚打十年的模拟电路老兵在和你边画波形边聊天; ✅ 所有模块(…

作者头像 李华
网站建设 2026/3/14 3:16:14

突破硬件限制:Lilu让你的黑苹果焕发新生

突破硬件限制&#xff1a;Lilu让你的黑苹果焕发新生 【免费下载链接】Lilu Arbitrary kext and process patching on macOS 项目地址: https://gitcode.com/gh_mirrors/li/Lilu 为什么你的黑苹果总崩溃&#xff1f;内核扩展的兼容性谜题 想象一下这样的场景&#xff1a…

作者头像 李华