#ifndef CORE_LOGGER_H #define CORE_LOGGER_H #include #include "utils/String.h" namespace Core::Logger { enum class Level { ERROR, WARNING, INFO, DEBUG }; extern Level level; } #if defined(LOG_LEVEL) && LOG_LEVEL >= 1 #define LOG_ERROR(form, ...) \ if(Core::Logger::level >= Core::Logger::Level::ERROR) { \ printf("\33[1;31m[ERROR] "); \ Core::String::format(form, __VA_ARGS__).print(); \ printf("\33[39;49m\n"); \ } #else #define LOG_ERROR(form, ...) #endif #if defined(LOG_LEVEL) && LOG_LEVEL >= 2 #define LOG_WARNING(form, ...) \ if(Core::Logger::level >= Core::Logger::Level::WARNING) { \ printf("\33[1;33m[WARNING] "); \ Core::String::format(form, __VA_ARGS__).print(); \ printf("\33[39;49m\n"); \ } #else #define LOG_WARNING(form, ...) #endif #if defined(LOG_LEVEL) && LOG_LEVEL >= 3 #define LOG_INFO(form, ...) \ if(Core::Logger::level >= Core::Logger::Level::INFO) { \ printf("\33[1;37m[INFO] "); \ Core::String::format(form, __VA_ARGS__).print(); \ printf("\33[39;49m\n"); \ } #else #define LOG_INFO(form, ...) #endif #if defined(LOG_LEVEL) && LOG_LEVEL >= 4 #define LOG_DEBUG(form, ...) \ if(Core::Logger::level >= Core::Logger::Level::DEBUG) { \ printf("\33[1;32m[DEBUG] "); \ Core::String::format(form, __VA_ARGS__).print(); \ printf("\33[39;49m\n"); \ } #else #define LOG_DEBUG(form, ...) #endif #endif