Extra2D/include/utils/logger.h

150 lines
3.6 KiB
C
Raw Normal View History

2026-02-11 19:40:26 +08:00
#pragma once
#include <memory>
2026-02-11 19:40:26 +08:00
#include <string>
#include <utility>
2026-02-11 19:40:26 +08:00
#include <spdlog/fmt/fmt.h>
#include <spdlog/spdlog.h>
#ifdef __SWITCH__
#include <switch.h>
#endif
2026-02-11 19:40:26 +08:00
namespace extra2d {
/**
* @brief
*/
2026-02-11 19:40:26 +08:00
enum class LogLevel {
Trace = spdlog::level::trace,
Debug = spdlog::level::debug,
Info = spdlog::level::info,
Warn = spdlog::level::warn,
Error = spdlog::level::err,
Fatal = spdlog::level::critical,
Off = spdlog::level::off
2026-02-11 19:40:26 +08:00
};
/**
* @brief
*
*
* setLevel()
*/
2026-02-11 19:40:26 +08:00
class Logger {
public:
/**
* @brief
*/
static void init();
/**
* @brief
*/
static void shutdown();
/**
* @brief
* @param level
*/
static void setLevel(LogLevel level);
/**
* @brief /
2026-02-11 19:40:26 +08:00
* @param enable
*/
static void setConsoleOutput(bool enable);
/**
* @brief
* @param filename
2026-02-11 19:40:26 +08:00
*/
static void setFileOutput(const std::string &filename);
/**
* @brief
* @return
*/
static LogLevel getLevel();
2026-02-11 19:40:26 +08:00
/**
* @brief
* @tparam Args
2026-02-11 19:40:26 +08:00
* @param level
* @param fmt
* @param args
2026-02-11 19:40:26 +08:00
*/
template <typename... Args>
static void log(LogLevel level, fmt::format_string<Args...> fmt,
Args &&...args) {
if (!logger_) {
2026-02-11 19:40:26 +08:00
return;
}
auto spdLevel = static_cast<spdlog::level::level_enum>(level);
logger_->log(spdLevel, fmt, std::forward<Args>(args)...);
2026-02-11 19:40:26 +08:00
}
/**
* @brief
2026-02-11 19:40:26 +08:00
* @param level
* @param msg
*/
static void log(LogLevel level, const char *msg);
2026-02-11 19:40:26 +08:00
/**
* @brief spdlog
* @return spdlog
2026-02-11 19:40:26 +08:00
*/
static std::shared_ptr<spdlog::logger> getLogger() { return logger_; }
private:
static std::shared_ptr<spdlog::logger> logger_;
static bool initialized_;
static bool consoleOutput_;
static bool fileOutput_;
static std::string logFile_;
2026-02-11 19:40:26 +08:00
};
} // namespace extra2d
// ============================================
// 日志宏定义 - 简化统一版本
// ============================================
2026-02-11 19:40:26 +08:00
/**
* @brief -
*/
#define E2D_TRACE(...) \
2026-02-11 19:40:26 +08:00
::extra2d::Logger::log(::extra2d::LogLevel::Trace, __VA_ARGS__)
/**
* @brief -
*/
#define E2D_DEBUG(...) \
2026-02-11 19:40:26 +08:00
::extra2d::Logger::log(::extra2d::LogLevel::Debug, __VA_ARGS__)
/**
* @brief -
*/
#define E2D_INFO(...) \
2026-02-11 19:40:26 +08:00
::extra2d::Logger::log(::extra2d::LogLevel::Info, __VA_ARGS__)
/**
* @brief -
*/
#define E2D_WARN(...) \
2026-02-11 19:40:26 +08:00
::extra2d::Logger::log(::extra2d::LogLevel::Warn, __VA_ARGS__)
/**
* @brief -
*/
#define E2D_ERROR(...) \
::extra2d::Logger::log(::extra2d::LogLevel::Error, __VA_ARGS__)
2026-02-11 19:40:26 +08:00
/**
* @brief -
*/
#define E2D_FATAL(...) \
::extra2d::Logger::log(::extra2d::LogLevel::Fatal, __VA_ARGS__)