#ifndef COMET_LOG_H #define COMET_LOG_H #define COLOR_CLEAR "\x1b[0m" #define COLOR_DEBUG "\x1b[1;37m" #define COLOR_INFO "\x1b[1;96m" #define COLOR_WARN "\x1b[1;33m" #define COLOR_ERROR "\x1b[1;31m" #define DEBUG_FORMAT(format, ...) \ "[%s] " COLOR_DEBUG "debug" COLOR_CLEAR ": " format "\n", __func__, ## __VA_ARGS__ #define INFO_FORMAT(format, ...) \ "[%s] " COLOR_INFO "info" COLOR_CLEAR ": " format "\n", __func__, ## __VA_ARGS__ #define WARN_FORMAT(format, ...) \ "[%s] " COLOR_WARN "warning" COLOR_CLEAR ": " format "\n", __func__, ## __VA_ARGS__ #define ERROR_FORMAT(format, ...) \ "[%s] " COLOR_ERROR "error" COLOR_CLEAR ": " format "\n", __func__, ## __VA_ARGS__ #define log_debug(...) log_generic(LOG_DEBUG, DEBUG_FORMAT(__VA_ARGS__)) #define log_info(...) log_generic(LOG_INFO, INFO_FORMAT(__VA_ARGS__)) #define log_warn(...) log_generic(LOG_WARN, WARN_FORMAT(__VA_ARGS__)) #define log_error(...) log_generic(LOG_ERROR, ERROR_FORMAT(__VA_ARGS__)) typedef enum { LOG_DEBUG, LOG_INFO, LOG_WARN, LOG_ERROR, } LogLevel; void log_init(LogLevel level); void log_generic(LogLevel level, const char *format, ...); #endif // vim: ts=4 sw=4 et