#include "Logger/Logger.h" #include #include #include static LogLevel current_level = LOG_LEVEL_INFO; static const char *level_name(LogLevel level) { switch (level) { case LOG_LEVEL_ERROR: return "error"; case LOG_LEVEL_WARNING: return "warning"; case LOG_LEVEL_INFO: return "info"; case LOG_LEVEL_DEBUG: return "debug"; case LOG_LEVEL_SILENT: return "silent"; } return "unknown"; } int logger_is_enabled(LogLevel level) { return current_level != LOG_LEVEL_SILENT && level <= current_level; } static void log_message(LogLevel level, const char *format, va_list arguments) YAPSSG_FORMAT_PRINTF(2, 0); static void log_message(LogLevel level, const char *format, va_list arguments) { if (!logger_is_enabled(level)) { return; } fprintf(stderr, "yapssg: %s: ", level_name(level)); vfprintf(stderr, format, arguments); fputc('\n', stderr); fflush(stderr); } void logger_set_level(LogLevel level) { current_level = level; } LogLevel logger_get_level(void) { return current_level; } int logger_parse_level(const char *name, LogLevel *level) { if (strcmp(name, "error") == 0) { *level = LOG_LEVEL_ERROR; } else if (strcmp(name, "warning") == 0 || strcmp(name, "warn") == 0) { *level = LOG_LEVEL_WARNING; } else if (strcmp(name, "info") == 0) { *level = LOG_LEVEL_INFO; } else if (strcmp(name, "debug") == 0) { *level = LOG_LEVEL_DEBUG; } else if (strcmp(name, "silent") == 0 || strcmp(name, "quiet") == 0) { *level = LOG_LEVEL_SILENT; } else { return -1; } return 0; } void logger_log(LogLevel level, const char *format, ...) { va_list arguments; va_start(arguments, format); log_message(level, format, arguments); va_end(arguments); } void logger_error(const char *format, ...) { va_list arguments; va_start(arguments, format); log_message(LOG_LEVEL_ERROR, format, arguments); va_end(arguments); } void logger_warning(const char *format, ...) { va_list arguments; va_start(arguments, format); log_message(LOG_LEVEL_WARNING, format, arguments); va_end(arguments); } void logger_info(const char *format, ...) { va_list arguments; va_start(arguments, format); log_message(LOG_LEVEL_INFO, format, arguments); va_end(arguments); } void logger_debug(const char *format, ...) { va_list arguments; va_start(arguments, format); log_message(LOG_LEVEL_DEBUG, format, arguments); va_end(arguments); }