From 4c8d764d171ec77ff626cec273c44ec7e7a995fc Mon Sep 17 00:00:00 2001 From: frosty Date: Wed, 16 Sep 2026 16:32:06 -0400 Subject: init: init --- src/Logger/Logger.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/Logger/Logger.c (limited to 'src/Logger/Logger.c') diff --git a/src/Logger/Logger.c b/src/Logger/Logger.c new file mode 100644 index 0000000..c43b24b --- /dev/null +++ b/src/Logger/Logger.c @@ -0,0 +1,102 @@ +#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); +} -- cgit v1.3