10#include <SD/export.hpp>
11#include <fmt/format.h>
12#include <quill/Backend.h>
13#include <quill/LogFunctions.h>
14#include <quill/core/LogLevel.h>
16#define ENGINE_LOG_LEVEL_TRACE 0
17#define ENGINE_LOG_LEVEL_DEBUG 1
18#define ENGINE_LOG_LEVEL_INFO 2
19#define ENGINE_LOG_LEVEL_WARN 3
20#define ENGINE_LOG_LEVEL_ERROR 4
21#define ENGINE_LOG_LEVEL_CRITICAL 5
22#define ENGINE_LOG_LEVEL_OFF 6
24#ifndef ENGINE_LOG_LEVEL
25#define ENGINE_LOG_LEVEL ENGINE_LOG_LEVEL_INFO
28#ifndef ENGINE_LOG_LEVEL_ENGINE
29#define ENGINE_LOG_LEVEL_ENGINE ENGINE_LOG_LEVEL
32#ifndef ENGINE_LOG_LEVEL_GAME
33#define ENGINE_LOG_LEVEL_GAME ENGINE_LOG_LEVEL
83#define SD_LOG_CATEGORY_IMPL(CategoryPath, Level) \
84 constexpr auto cMinLevel = static_cast<::sd::log::LogLevel>(Level); \
85 constexpr const char* cCategoryPath = CategoryPath; \
87 inline ::quill::Logger* get_logger() { \
88 static ::quill::Logger* logger = ::sd::log::get_category_logger_or_report(CategoryPath); \
92 template<typename... Args> \
93 inline void trace(fmt::format_string<Args...> fmt, Args&&... args) { \
94 if constexpr (cMinLevel <= ::sd::log::LogLevel::TRACE) { \
95 if (auto* logger = get_logger()) { \
96 ::quill::tracel3(logger, fmt.get().data(), std::forward<Args>(args)...); \
101 template<typename... Args> \
102 inline void debug(fmt::format_string<Args...> fmt, Args&&... args) { \
103 if constexpr (cMinLevel <= ::sd::log::LogLevel::DEBUG) { \
104 if (auto* logger = get_logger()) { \
105 ::quill::debug(logger, fmt.get().data(), std::forward<Args>(args)...); \
110 template<typename... Args> \
111 inline void info(fmt::format_string<Args...> fmt, Args&&... args) { \
112 if constexpr (cMinLevel <= ::sd::log::LogLevel::INFO) { \
113 if (auto* logger = get_logger()) { \
114 ::quill::info(logger, fmt.get().data(), std::forward<Args>(args)...); \
119 template<typename... Args> \
120 inline void warn(fmt::format_string<Args...> fmt, Args&&... args) { \
121 if constexpr (cMinLevel <= ::sd::log::LogLevel::WARN) { \
122 if (auto* logger = get_logger()) { \
123 ::quill::warning(logger, fmt.get().data(), std::forward<Args>(args)...); \
128 template<typename... Args> \
129 inline void error(fmt::format_string<Args...> fmt, Args&&... args) { \
130 if (auto* logger = get_logger()) { \
131 ::quill::error(logger, fmt.get().data(), std::forward<Args>(args)...); \
135 template<typename... Args> \
136 [[noreturn]] inline void critical(fmt::format_string<Args...> fmt, Args&&... args) { \
137 if (auto* logger = get_logger()) { \
138 ::quill::critical(logger, fmt.get().data(), std::forward<Args>(args)...); \
139 logger->flush_log(); \
141 ::quill::Backend::stop(); \
145 template<typename... Args> \
146 inline void general(Args&&... args) { \
147 info(std::forward<Args>(args)...); \
150 template<typename... Args> \
151 inline void tagged(std::string_view subcategory, \
152 fmt::format_string<Args...> fmt, \
154 if (auto* logger = get_logger()) { \
156 fmt::format("[{}] {}", subcategory, fmt::format(fmt, std::forward<Args>(args)...)); \
157 ::quill::info(logger, msg.c_str()); \
187namespace debug_layer {
#define ENGINE_LOG_LEVEL_TRACE
Definition logging.hpp:16
#define ENGINE_LOG_LEVEL_WARN
Definition logging.hpp:19
#define ENGINE_LOG_LEVEL_INFO
Definition logging.hpp:18
#define ENGINE_LOG_LEVEL_OFF
Definition logging.hpp:22
#define SD_LOG_CATEGORY_IMPL(CategoryPath, Level)
Definition logging.hpp:83
#define ENGINE_LOG_LEVEL_CRITICAL
Definition logging.hpp:21
#define ENGINE_LOG_LEVEL_DEBUG
Definition logging.hpp:17
#define ENGINE_LOG_LEVEL_ENGINE
Definition logging.hpp:29
#define ENGINE_LOG_LEVEL_ERROR
Definition logging.hpp:20
Namespace for Engine intrinsic things.
Definition logging.hpp:36
LogLevel
Definition logging.hpp:38
SD_EXPORT std::deque< LogEntry > get_log_history()
Definition logging.cpp:90
SD_EXPORT std::vector< LogEntry > get_entries(size_t offset, size_t count)
Definition logging.cpp:119
SD_EXPORT void add_log_entry(LogEntry entry)
Definition logging.cpp:95
SD_EXPORT std::vector< CategoryInfo > & get_category_registry()
Definition logging.cpp:148
bool is_category_under(const std::string &child, const std::string &parent)
Definition logging.cpp:428
SD_EXPORT void clear_history()
Definition logging.cpp:105
quill::LogLevel to_quill_level(LogLevel level)
Definition logging.cpp:152
SD_EXPORT void register_category(const char *name, ImVec4 color)
Definition logging.cpp:409
quill::Logger * get_category_logger_or_report(const char *categoryPath)
Definition logging.cpp:486
LogLevel from_quill_level(quill::LogLevel level)
Definition logging.cpp:173
SD_EXPORT size_t get_total_entry_count()
Definition logging.cpp:114
SD_EXPORT void init()
Definition logging.cpp:436
Definition logging.hpp:56
std::string name
Definition logging.hpp:57
bool visible
Definition logging.hpp:58
ImVec4 color
Definition logging.hpp:59
Definition logging.hpp:49
std::string message
Definition logging.hpp:52
LogLevel level
Definition logging.hpp:51
float uptime_sec
Definition logging.hpp:53
std::string category
Definition logging.hpp:50
consteval U64 type_id_of()
Definition type_id.hpp:6