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
的宏,以便于在项目中使用。我会逐一解释给你:
-
预处理器指令:
#ifndef GMS_SPDLOG_DEFINE_H #define GMS_SPDLOG_DEFINE_H
这是一个常见的宏防护机制,防止头文件被多次包含。
-
设置spdlog的日志级别:
#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_TRACE
这里设置的
spdlog
日志级别为TRACE
,这意味着所有高于或等于TRACE
级别的日志都会被记录。 -
头文件包含:
#include "spdlog/spdlog.h" #include "spdlog/sinks/daily_file_sink.h" #include "spdlog/sinks/stdout_color_sinks.h" #include "utility/process_path.hpp"
这些是
spdlog
的核心头文件和一些其他的辅助头文件。 -
类型别名和全局变量:
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::logger
的shared_ptr
。接下来的几个extern
声明意味着这些变量在其他的源文件中定义。 -
日志宏定义:
每一个宏如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")
这样的宏,它就会按照定义进行日志记录。
你有其他关于这个头文件或其用法的问题吗?