From f2c34b1d2c18270a0327fb4896fa307fae098770 Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Tue, 14 Jul 2026 17:29:02 +0200 Subject: Initial --- core/logger.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 core/logger.c (limited to 'core/logger.c') diff --git a/core/logger.c b/core/logger.c new file mode 100644 index 0000000..47182ce --- /dev/null +++ b/core/logger.c @@ -0,0 +1,98 @@ +// file : core/logger.c +// project : Salis-VM +// author : Paul Oliver + +// index: +// [section] includes +// [section] macros +// [section] definitions + +// ---------------------------------------------------------------------------- +// [section] includes +// ---------------------------------------------------------------------------- +#include +#include +#include +#include +#include + +#include "logger.h" + +// ---------------------------------------------------------------------------- +// [section] macros +// ---------------------------------------------------------------------------- +#define LOG_BUFFER_SIZE 0x800 + +#define COLOR_CLEAR "\033[0m" +#define COLOR_TRACE "\033[1;34m" +#define COLOR_INFO "\033[1;32m" +#define COLOR_ATTENTION "\033[1;33m" + +#define LEVEL_TRACE "TRACE" +#define LEVEL_INFO "INFO" +#define LEVEL_ATTENTION "ATTENTION" + +// ---------------------------------------------------------------------------- +// [section] definitions +// ---------------------------------------------------------------------------- +static void log_default(const char *color_code, const char *level, const char *format, va_list args) { + assert(level); + assert(format); + + char log_buffer[LOG_BUFFER_SIZE]; + struct timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + int msec = (int)(ts.tv_nsec / 1000000l); + struct tm tm = *localtime(&ts.tv_sec); + pid_t pid = getpid(); + + int rem = snprintf( + log_buffer, + LOG_BUFFER_SIZE, + "\r%s%d-%02d-%02d %02d:%02d:%02d.%03d %07d [%s]%s ", + color_code ? color_code : "", + tm.tm_year + 1900, + tm.tm_mon + 1, + tm.tm_mday, + tm.tm_hour, + tm.tm_min, + tm.tm_sec, + msec, + pid, + level, + color_code ? COLOR_CLEAR : "" + ); + + vsnprintf(log_buffer + rem, LOG_BUFFER_SIZE - rem, format, args); + printf("%s\n", log_buffer); + fflush(stdout); +} + +void log_trace(const char *format, ...) { + assert(format); + +#if defined(LOG_TRACE) + va_list args; + va_start(args, format); + log_default(COLOR_TRACE, LEVEL_TRACE, format, args); + va_end(args); +#else + (void)format; +#endif +} + +void log_info(const char *format, ...) { + assert(format); + va_list args; + va_start(args, format); + log_default(COLOR_INFO, LEVEL_INFO, format, args); + va_end(args); +} + +void log_attention(const char *format, ...) { + assert(format); + va_list args; + va_start(args, format); + log_default(COLOR_ATTENTION, LEVEL_ATTENTION, format, args); + va_end(args); +} -- cgit v1.3.1