5 #define STRINGIFY(x) #x
6 #define TO_STRING(x) STRINGIFY(x)
7 #define TRACE_FILE_LOG \
9 "[EMBER_ENGINE][" __FILE__ ":" TO_STRING(__LINE__) "]: "
34 void push(
const std::string& formatted_log);
44 std::mutex _mutex = std::mutex();
45 SDL_Thread* _thread =
nullptr;
46 std::condition_variable _condition = std::condition_variable();
47 std::atomic<bool> _is_running =
false;
49 std::deque<std::string> _log_queue = std::deque<std::string>();
60 #define LOG_ERROR(...) \
63 SDL_snprintf(buffer, sizeof(buffer), TRACE_FILE_LOG __VA_ARGS__); \
64 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s", buffer); \
65 Logger::get_instance().push(buffer); \
75 #define LOG_INFO(...) \
78 SDL_snprintf(buffer, sizeof(buffer), TRACE_FILE_LOG __VA_ARGS__); \
79 SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "%s", buffer); \
80 Logger::get_instance().push(buffer); \
90 #define LOG_DEBUG(...) \
93 SDL_snprintf(buffer, sizeof(buffer), TRACE_FILE_LOG __VA_ARGS__); \
94 SDL_LogDebug(SDL_LOG_CATEGORY_APPLICATION, "%s", buffer); \
95 Logger::get_instance().push(buffer); \
105 #define LOG_VERBOSE(...) \
108 SDL_snprintf(buffer, sizeof(buffer), TRACE_FILE_LOG __VA_ARGS__); \
109 SDL_LogVerbose(SDL_LOG_CATEGORY_APPLICATION, "%s", buffer); \
110 Logger::get_instance().push(buffer); \
120 #define LOG_WARN(...) \
123 SDL_snprintf(buffer, sizeof(buffer), TRACE_FILE_LOG __VA_ARGS__); \
124 SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, "%s", buffer); \
125 Logger::get_instance().push(buffer); \
135 #define LOG_TRACE(...) \
138 SDL_snprintf(buffer, sizeof(buffer), TRACE_FILE_LOG __VA_ARGS__); \
139 SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "%s", buffer); \
140 Logger::get_instance().push(buffer); \
150 #define LOG_CRITICAL(...) \
153 SDL_snprintf(buffer, sizeof(buffer), TRACE_FILE_LOG __VA_ARGS__); \
154 SDL_LogCritical(SDL_LOG_CATEGORY_APPLICATION, "%s", buffer); \
155 Logger::get_instance().push(buffer); \
165 #define LOG_QUIT_ON_FAIL(x) \
167 LOG_ERROR("%s", SDL_GetError()); \
168 return SDL_APP_FAILURE; \
180 unsigned int error = glGetError(); \
181 if (error != GL_NO_ERROR) { \
182 LOG_ERROR("API ERROR_CODE: %d", error); \
192 #define EMBER_TIMER_START() auto start = std::chrono::high_resolution_clock::now();
201 #define EMBER_TIMER_END(description) \
203 auto end = std::chrono::high_resolution_clock::now(); \
204 auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count(); \
205 LOG_INFO("%s took %lld (us), %.2f (ms)", description, duration, (float) duration / 1000.f); \
Class for logging, tracing and debugging.
Definition: logging_sys.h:28
static Logger & get_instance()
Definition: logging_sys.cpp:4
void push(const std::string &formatted_log)
Definition: logging_sys.cpp:25
static void destroy()
Definition: logging_sys.cpp:36
static void initialize()
Definition: logging_sys.cpp:9