#ifndef CORE_LOGGER_HPP #define CORE_LOGGER_HPP #include #include "core/utils/Check.h" #define CORE_TERMINAL_RED "\33[1;31m" #define CORE_TERMINAL_YELLOW "\33[1;33m" #define CORE_TERMINAL_GRAY "\33[1;37m" #define CORE_TERMINAL_GREEN "\33[1;32m" #define CORE_TERMINAL_RESET "\33[0m" typedef enum { LOG_LEVEL_ERROR, LOG_LEVEL_WARNING, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG } Logger_Level; extern Logger_Level logLevel; const char* Logger_getShortFileName(const char* s); check_format(6, 7) void Logger_log(Logger_Level l, const char* file, int line, const char* prefix, const char* tag, const char* format, ...); #if defined(CORE_LOG_LEVEL) && CORE_LOG_LEVEL >= 1 #define CORE_LOG_ERROR(...) \ Logger_log(LOG_LEVEL_ERROR, __FILE__, __LINE__, CORE_TERMINAL_RED, \ "[ERROR] ", __VA_ARGS__); #else #define CORE_LOG_ERROR(...) #endif #if defined(CORE_LOG_LEVEL) && CORE_LOG_LEVEL >= 2 #define CORE_LOG_WARNING(...) \ Logger_log(LOG_LEVEL_WARNING, __FILE__, __LINE__, CORE_TERMINAL_YELLOW, \ "[WARNING] ", __VA_ARGS__); #else #define CORE_LOG_WARNING(...) #endif #if defined(CORE_LOG_LEVEL) && CORE_LOG_LEVEL >= 3 #define CORE_LOG_INFO(...) \ Logger_log(LOG_LEVEL_INFO, __FILE__, __LINE__, CORE_TERMINAL_GRAY, \ "[INFO] ", __VA_ARGS__); #else #define CORE_LOG_INFO(...) #endif #if defined(CORE_LOG_LEVEL) && CORE_LOG_LEVEL >= 4 #define CORE_LOG_DEBUG(...) \ Logger_log(LOG_LEVEL_DEBUG, __FILE__, __LINE__, CORE_TERMINAL_GREEN, \ "[DEBUG] ", __VA_ARGS__); #else #define CORE_LOG_DEBUG(...) #endif #endif