#ifndef CORE_LOGGER_H #define CORE_LOGGER_H #include "core/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 { CORE_LOG_NONE, CORE_LOG_ERROR, CORE_LOG_WARNING, CORE_LOG_INFO, CORE_LOG_DEBUG } CoreLogLevel; extern CoreLogLevel coreLogLevel; const char* coreGetShortFileName(const char* s); check_format(6, 7) void coreLog(CoreLogLevel 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(...) \ coreLog(CORE_LOG_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(...) \ coreLog(CORE_LOG_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(...) \ coreLog(CORE_LOG_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(...) \ coreLog(CORE_LOG_DEBUG, __FILE__, __LINE__, CORE_TERMINAL_GREEN, \ "[DEBUG] ", __VA_ARGS__) #else #define CORE_LOG_DEBUG(...) #endif #ifdef IMPORT_CORE #define TERMINAL_RED CORE_TERMINAL_RED #define TERMINAL_YELLOW CORE_TERMINAL_YELLOW #define TERMINAL_GRAY CORE_TERMINAL_GRAY #define TERMINAL_GREEN CORE_TERMINAL_GREEN #define TERMINAL_RESET CORE_TERMINAL_RESET #define LogLevel CoreLogLevel #define LOG_NONE CORE_LOG_NONE #define LOG_ERROR CORE_LOG_ERROR #define LOG_WARNING CORE_LOG_WARNING #define LOG_INFO CORE_LOG_INFO #define LOG_DEBUG CORE_LOG_DEBUG #define logLevel coreLogLevel #define getShortFileName coreGetShortFileName #define LOG_ERROR CORE_LOG_ERROR #define LOG_WARNING CORE_LOG_WARNING #define LOG_INFO CORE_LOG_INFO #define LOG_DEBUG CORE_LOG_DEBUG #endif #endif