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/4/26 15:01:50

Windows鼠标增强工具效率提升指南:从基础配置到高级定制

Windows鼠标增强工具效率提升指南&#xff1a;从基础配置到高级定制 【免费下载链接】sensible-side-buttons A macOS menu bar app that enables system-wide navigation functionality for the side buttons on third-party mice. 项目地址: https://gitcode.com/gh_mirror…

作者头像 李华
网站建设 2026/4/23 10:31:53

UniHacker完整使用指南:3步解锁Unity全功能开发

UniHacker完整使用指南&#xff1a;3步解锁Unity全功能开发 【免费下载链接】UniHacker 为Windows、MacOS、Linux和Docker修补所有版本的Unity3D和UnityHub 项目地址: https://gitcode.com/GitHub_Trending/un/UniHacker 一、工具核心价值与应用场景 UniHacker作为一款…

作者头像 李华
网站建设 2026/4/26 4:02:17

高效API测试新选择:Restfox轻量级客户端全解析

高效API测试新选择&#xff1a;Restfox轻量级客户端全解析 【免费下载链接】Restfox Minimalist HTTP client for the Web & Desktop 项目地址: https://gitcode.com/gh_mirrors/re/Restfox 在API开发与测试领域&#xff0c;选择一款既能满足专业需求又简单易用的工…

作者头像 李华
网站建设 2026/4/17 5:27:42

零代码搭建AI笔记系统:一站式部署指南

零代码搭建AI笔记系统&#xff1a;一站式部署指南 【免费下载链接】open-notebook An Open Source implementation of Notebook LM with more flexibility and features 项目地址: https://gitcode.com/GitHub_Trending/op/open-notebook 在信息爆炸的时代&#xff0c;高…

作者头像 李华
网站建设 2026/4/23 14:05:25

智能签到新体验:XAutoDaily让QQ自动化管理更高效

智能签到新体验&#xff1a;XAutoDaily让QQ自动化管理更高效 【免费下载链接】XAutoDaily 一个基于QQ的全自动签到模块 项目地址: https://gitcode.com/GitHub_Trending/xa/XAutoDaily 每天重复手动签到QQ空间、兴趣部落和各类活动&#xff0c;是否已经让你感到厌烦&…

作者头像 李华
网站建设 2026/4/23 15:30:35

轻量级极速部署!PaoPaoDNS 一键构建高性能递归 DNS 服务

轻量级极速部署&#xff01;PaoPaoDNS 一键构建高性能递归 DNS 服务 【免费下载链接】PaoPaoDNS 泡泡DNS是一个能一键部署递归DNS的docker镜像 项目地址: https://gitcode.com/gh_mirrors/pa/PaoPaoDNS PaoPaoDNS&#xff08;泡泡DNS&#xff09;是一款专注于一键部署递…

作者头像 李华