news 2026/4/30 22:37:58

即时通讯项目--(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/5/1 8:49:25

警惕!lo库的5个性能陷阱:从数据规模到分布式场景的避坑指南

警惕&#xff01;lo库的5个性能陷阱&#xff1a;从数据规模到分布式场景的避坑指南 【免费下载链接】lo samber/lo: Lo 是一个轻量级的 JavaScript 库&#xff0c;提供了一种简化创建和操作列表&#xff08;数组&#xff09;的方法&#xff0c;包括链式调用、函数式编程风格的操…

作者头像 李华
网站建设 2026/5/1 7:51:06

突破字体设计瓶颈:AI驱动的创意革命

突破字体设计瓶颈&#xff1a;AI驱动的创意革命 【免费下载链接】zi2zi Learning Chinese Character style with conditional GAN 项目地址: https://gitcode.com/gh_mirrors/zi/zi2zi 还在为字体设计耗时几周&#xff1f;当我用500个汉字训练模型后&#xff0c;AI让我在…

作者头像 李华
网站建设 2026/5/1 9:12:42

es客户端工具基础操作图解说明(新手友好)

以下是对您提供的博文内容进行 深度润色与结构重构后的优化版本 。整体风格更贴近一位资深ES实践者在技术社区中自然分享的经验贴—— 去模板化、强逻辑流、重实操感、轻说教味 ,同时大幅增强可读性、专业性与新手友好度。全文已删除所有AI痕迹明显的“总-分-总”式标题、…

作者头像 李华
网站建设 2026/5/1 4:36:30

Qwen3-1.7B性能瓶颈在哪?GPU算力压测实战分析

Qwen3-1.7B性能瓶颈在哪&#xff1f;GPU算力压测实战分析 你有没有试过——模型明明只有1.7B参数&#xff0c;推理时却卡在显存分配、吞吐掉到个位数、首字延迟动辄2秒以上&#xff1f;不是模型太小跑不快&#xff0c;而是它没“跑对地方”。本文不讲论文指标&#xff0c;不堆…

作者头像 李华
网站建设 2026/4/30 11:58:38

3步实现Spring Boot环境零配置切换

3步实现Spring Boot环境零配置切换 【免费下载链接】RuoYi-Vue3 :tada: (RuoYi)官方仓库 基于SpringBoot&#xff0c;Spring Security&#xff0c;JWT&#xff0c;Vue3 & Vite、Element Plus 的前后端分离权限管理系统 项目地址: https://gitcode.com/GitHub_Trending/ru…

作者头像 李华
网站建设 2026/5/1 9:38:50

GPEN色彩还原准确性:肤色保护功能实测数据报告

GPEN色彩还原准确性&#xff1a;肤色保护功能实测数据报告 1. 实测背景与核心关注点 很多人用GPEN做老照片修复、人像增强时&#xff0c;最担心的不是“修得清不清楚”&#xff0c;而是“修得像不像”——尤其是人脸部分。一张照片里&#xff0c;肤色一旦偏黄、发灰、过白或泛…

作者头像 李华