spdlog

1

#ifndef GMS_SPDLOG_DEFINE_H
#define GMS_SPDLOG_DEFINE_H
#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_TRACE
#include "spdlog/spdlog.h"
#include "spdlog/sinks/daily_file_sink.h"
#include "spdlog/sinks/stdout_color_sinks.h"
#include "utility/process_path.hpp"

typedef std::shared_ptr<spdlog::logger>(*SpdLogGetFun)(const std::string &name);
extern SpdLogGetFun spdlog_get_g_;
extern string spdlog_log_name_g_;
extern string spdlog_msg_name_g_;
extern spdlog::logger* default_logger_console_g_;


#define TRACELOG(...) SPDLOG_LOGGER_TRACE(default_logger_console_g_, __VA_ARGS__);SPDLOG_LOGGER_TRACE(spdlog_get_g_(spdlog_log_name_g_), __VA_ARGS__)
#define DEBUGLOG(...) SPDLOG_LOGGER_DEBUG(default_logger_console_g_, __VA_ARGS__);SPDLOG_LOGGER_DEBUG(spdlog_get_g_(spdlog_log_name_g_), __VA_ARGS__)
#define INFOLOG(...) SPDLOG_LOGGER_INFO(default_logger_console_g_, __VA_ARGS__);SPDLOG_LOGGER_INFO(spdlog_get_g_(spdlog_log_name_g_), __VA_ARGS__)
#define WARNLOG(...) SPDLOG_LOGGER_WARN(default_logger_console_g_, __VA_ARGS__);SPDLOG_LOGGER_WARN(spdlog_get_g_(spdlog_log_name_g_), __VA_ARGS__)
#define ERRORLOG(...) SPDLOG_LOGGER_ERROR(default_logger_console_g_, __VA_ARGS__);SPDLOG_LOGGER_ERROR(spdlog_get_g_(spdlog_log_name_g_), __VA_ARGS__)
#define MSGLOG(...) SPDLOG_LOGGER_INFO(default_logger_console_g_, __VA_ARGS__);SPDLOG_LOGGER_INFO(spdlog_get_g_(spdlog_log_name_g_), __VA_ARGS__);SPDLOG_LOGGER_INFO(spdlog_get_g_(spdlog_msg_name_g_), __VA_ARGS__)

这个 spdlog_define.h 文件定义了一些基于 spdlog 的宏,以便于在项目中使用。我会逐一解释给你:

  1. 预处理器指令:

    #ifndef GMS_SPDLOG_DEFINE_H
    #define GMS_SPDLOG_DEFINE_H
    

    这是一个常见的宏防护机制,防止头文件被多次包含。

  2. 设置spdlog的日志级别:

    #define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_TRACE
    

    这里设置的 spdlog 日志级别为 TRACE,这意味着所有高于或等于 TRACE 级别的日志都会被记录。

  3. 头文件包含:

    #include "spdlog/spdlog.h"
    #include "spdlog/sinks/daily_file_sink.h"
    #include "spdlog/sinks/stdout_color_sinks.h"
    #include "utility/process_path.hpp"
    

    这些是 spdlog 的核心头文件和一些其他的辅助头文件。

  4. 类型别名和全局变量:

    typedef std::shared_ptr<spdlog::logger>(*SpdLogGetFun)(const std::string &name);
    extern SpdLogGetFun spdlog_get_g_;
    extern string spdlog_log_name_g_;
    extern string spdlog_msg_name_g_;
    extern spdlog::logger* default_logger_console_g_;
    

    这里定义了一个函数指针类型 SpdLogGetFun,该函数接收一个字符串参数并返回一个 spdlog::loggershared_ptr。接下来的几个 extern 声明意味着这些变量在其他的源文件中定义。

  5. 日志宏定义:
    每一个宏如 TRACELOG, DEBUGLOG, INFOLOG 等,都是为了方便的进行日志记录。这些宏会同时往控制台和文件写日志。例如:

    #define TRACELOG(...) SPDLOG_LOGGER_TRACE(default_logger_console_g_, __VA_ARGS__);SPDLOG_LOGGER_TRACE(spdlog_get_g_(spdlog_log_name_g_), __VA_ARGS__)
    

    使用 TRACELOG 时,它会首先往 default_logger_console_g_ 控制台日志器写一条 TRACE 级别的日志,然后往名为 spdlog_log_name_g_ 的文件日志器写一条 TRACE 级别的日志。

如果你需要进行日志记录,只需在你的代码中调用如 TRACELOG("This is a trace log") 这样的宏,它就会按照定义进行日志记录。

你有其他关于这个头文件或其用法的问题吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中的spdlog是一个快速、易于使用的日志记录库。它提供了多种日志记录模式,支持多线程,具有灵活的格式化选项,并且在性能上表现出色。你可以使用spdlog来记录应用程序中的各种事件、错误和调试信息。 要使用spdlog,首先你需要在你的C++项目中包含spdlog头文件,并将spdlog库链接到你的项目中。你可以通过下载spdlog的源代码并手动添加到你的项目中,或者使用包管理工具(如vcpkg)来安装spdlog。 下面是一个简单的示例,展示了如何在C++中使用spdlog进行日志记录: ```cpp #include <spdlog/spdlog.h> int main() { // 创建一个名为"my_logger"的日志记录器 auto logger = spdlog::stdout_logger_mt("my_logger"); // 设置日志记录级别为调试 spdlog::set_level(spdlog::level::debug); // 记录不同级别的日志信息 logger->info("This is an info message"); logger->warn("This is a warning message"); logger->error("This is an error message"); return 0; } ``` 在上面的示例中,我们创建了一个名为"my_logger"的日志记录器,并将其输出到控制台(stdout)。然后,我们设置日志记录级别为调试(debug),这意味着所有调试级别及更高级别的日志消息都会被记录。 最后,我们使用logger对象记录了一些不同级别的日志消息。日志消息的格式可以根据你的需要进行自定义。 这只是一个简单的示例,你可以根据你的具体需求使用spdlog进行更复杂的日志记录。你可以查看spdlog的文档以获取更多详细信息和示例:https://github.com/gabime/spdlog

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值