From 397286c87dc9aa3cba458973bdc65b3f3be14657 Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Thu, 23 Apr 2026 04:08:40 +0200 Subject: Unifies logging between C and Python --- core/logger.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 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..38ac8ed --- /dev/null +++ b/core/logger.c @@ -0,0 +1,84 @@ +#define LOG_LINE_SIZE 1024 + +enum LogLevel { + LOG_INFO, + LOG_WARN, + LOG_ERRO, +}; + +char g_log_buff[LOG_LINE_SIZE]; + +void log_msg_to_buff(char *out, int size, enum LogLevel level, const char *format, va_list args) { + assert(out); + assert(size); + assert(level == LOG_INFO || level == LOG_WARN || level == LOG_ERRO); + assert(format); + + struct timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + long msec = ts.tv_nsec / 1000000; + struct tm tm = *localtime(&ts.tv_sec); + int pid = getpid(); + + char *level_str = NULL; + switch (level) { + case LOG_INFO: level_str = "INFO"; break; + case LOG_WARN: level_str = "WARN"; break; + case LOG_ERRO: level_str = "ERRO"; break; + default: assert(false); + } + + int col = snprintf( + out, + size, + "%d-%02d-%02d %02d:%02d:%02d.%03ld %d [%s] ", + tm.tm_year + 1900, + tm.tm_mon + 1, + tm.tm_mday, + tm.tm_hour, + tm.tm_min, + tm.tm_sec, + msec, + pid, + level_str + ); + + vsnprintf(out + col, size - col, format, args); +} + +void log_msg(enum LogLevel level, const char *format, va_list args) { + assert(level == LOG_INFO || level == LOG_WARN || level == LOG_ERRO); + assert(format); + + log_msg_to_buff(g_log_buff, LOG_LINE_SIZE, level, format, args); + printf("\r%s\n", g_log_buff); +} + +void log_info(const char *format, ...) { + assert(format); + + va_list args; + va_start(args, format); + log_msg(LOG_INFO, format, args); + va_end(args); +} + +void log_warn(const char *format, ...) { + assert(format); + + va_list args; + va_start(args, format); + log_msg(LOG_WARN, format, args); + va_end(args); +} + +void log_erro(const char *format, ...) { + assert(format); + + va_list args; + va_start(args, format); + log_msg(LOG_ERRO, format, args); + va_end(args); + + exit(1); +} -- cgit v1.3