日志库封装(项目通用)

日志库的封装适用于项目调试问题,可以通过打印日志信息具体定位到某一位置。

日志级别管理

日志库支持多种日志级别(TRACE、DEBUG、INFO、WARN、ERROR、FATAL等)。

开发阶段,可以将日志设置为DEBUG,输出详细的信息;生产环境中,将日志级别设置为ERROR或WARNING,只记录关键的错误和警告信息。

日志格式化

日志库可以提供灵活的日志格式化功能,包括时间戳、日志级别、线程信息、文件名、行号等。如:

2025-08-12 10:00:00 INFO main.cpp:124 This is an info message.这种格式化有助于快速具体定位问题和理解日志内容。

cout输出输出格式单一,没有内置的格式化功能,需要手动添加时间戳等信息。

spdlog封装

采用google的spdlog日志库进行日志管理,对spdlog采用单例模式进行封装。

MyLog.h 复制代码
namespace ys {

class Logger

{

public:

    static void InitLogger(std::string logger_name,std::string log_file,spdlog::level::level_enum log_level);

    static std::shared_ptr<spdlog::logger> GetLogger();

private:

    Logger();

    Logger(const Logger&) = delete;

    Logger& operator=(const Logger&)=delete;

private:

    std::shared_ptr<spdlog::logger> _logger;

    std::mutex _mutex;

};

#define DUBG(format, ...) Logger::GetLogger()->debug(std::string("[{:>10s}:{:<4d}]")+format,__FILE__,__LINE__, ##__VA_ARGS__)

#define INFO(format, ...) Logger::GetLogger()->info(std::string("[{:>10s}:{:<4d}]")+format,__FILE__,__LINE__, ##__VA_ARGS__)

#define WARN(format, ...) Logger::GetLogger()->warn(std::string("[{:>10s}:{:<4d}]")+format,__FILE__,__LINE__, ##__VA_ARGS__)

#define ERR(format, ...) Logger::GetLogger()->error(std::string("[{:>10s}:{:<4d}]")+format,__FILE__,__LINE__, ##__VA_ARGS__)

  


};
相关推荐
王老师青少年编程4 小时前
2026年6月GESP真题及题解(C++一级):交税
c++·题解·真题·gesp·一级·2026年6月·交税
疋瓞9 小时前
python和C++对比(1)_数据类型和数据结构
数据结构·c++·python
C语言小火车9 小时前
C++ 堆排序深度精讲:基于完全二叉树的选择排序进化,最坏情况 O(n log n) 的稳定王者
开发语言·c++·算法·排序算法·堆排序
ALex_zry10 小时前
C++26 std::complex 结构化绑定详解:auto [re, im] = c
c语言·开发语言·c++
_olone11 小时前
Luogu P2704 [NOI2001] 炮兵阵地
c++·算法·状压dp
c2385611 小时前
互斥锁高频面试题全解:从基础概念到底层实现,一文通关
java·c++·面试·职场和发展
nianniannnn12 小时前
c++复习自存--继承
开发语言·c++
旖-旎12 小时前
《LeetCode 746 使用最小花费爬楼梯 || LeetCode 91 解码方法》
c++·算法·leetcode·动态规划
ALex_zry13 小时前
C++26 constexpr 异常详解:编译期也能 throw/catch
java·jvm·c++
王老师青少年编程13 小时前
2026年6月GESP真题及题解(C++二级):完全平方数计数
c++·题解·真题·gesp·二级·2026年6月·完全平方数计数