From 964425e7b8e37b7b574a755ef7c98a2b2a14c9eb Mon Sep 17 00:00:00 2001 From: lucielle Date: Tue, 19 May 2026 18:43:57 -0500 Subject: [PATCH] add logger history --- LLog.c | 29 +++++++++++++++++++++-------- include/LLog.h | 13 ++++++++++--- test/test.c | 12 +++++++----- 3 files changed, 38 insertions(+), 16 deletions(-) diff --git a/LLog.c b/LLog.c index 062a985..c69a74b 100644 --- a/LLog.c +++ b/LLog.c @@ -16,6 +16,17 @@ int timer_array_append(timer_array* array, lTimer timer) { return array->count - 1; } +int lLogString_array_append(lLogString_array* array, lLogString* string) { + if (array->count >= array->capacity) { + if (array->capacity == 0) array->capacity = 8; + else array->capacity *= 2; + + array->items = realloc(array->items, array->capacity * sizeof(*array->items)); + } + array->items[array->count++] = string; + return array->count - 1; +} + int create_timer(Logger* logger) { return timer_array_append(&logger->timers, (lTimer){}); } @@ -30,7 +41,7 @@ void stop_timer(Logger* logger, int timer_id) { logger->timers.items[timer_id].time.end = time(NULL); } -lLogString lLogString_new(const char* fmt, ...) { +lLogString* lLogString_new(const char* fmt, ...) { va_list args; va_start(args, fmt); @@ -39,22 +50,24 @@ lLogString lLogString_new(const char* fmt, ...) { va_end(args); - lLogString str; - str.len = strlen(temp_string); + lLogString* str = calloc(1, sizeof(lLogString)); + str->len = strlen(temp_string); - str.buf = malloc(str.len + 1); - if (str.buf != NULL) { - strcpy(str.buf, temp_string); + str->buf = malloc(str->len + 1); + if (str->buf != NULL) { + strcpy(str->buf, temp_string); } return str; }; -void lLog(Logger logger, enum lLogLevel LOG_LEVEL, lLogString MESSAGE) { +int lLog(Logger* logger, enum lLogLevel LOG_LEVEL, lLogString* MESSAGE) { char* LOG_LEVEL_STRING = LOG_LEVEL == 0 ? "INFO" : LOG_LEVEL == 1 ? "WARNING" : LOG_LEVEL == 2 ? "ERROR" : LOG_LEVEL == 3 ? "DEBUG" : "invalid_log_level"; - printf("[%s]: %.*s\n", LOG_LEVEL_STRING, (int)MESSAGE.len, MESSAGE.buf); + + printf("[%s]: %.*s\n", LOG_LEVEL_STRING, (int)MESSAGE->len, MESSAGE->buf); + return lLogString_array_append(&logger->history, MESSAGE); } \ No newline at end of file diff --git a/include/LLog.h b/include/LLog.h index a8e5e73..a526228 100644 --- a/include/LLog.h +++ b/include/LLog.h @@ -32,20 +32,27 @@ typedef struct { size_t capacity; lTimer* items; } timer_array; - int timer_array_append(timer_array* array, lTimer timer); +typedef struct { + size_t count; + size_t capacity; + lLogString** items; +} lLogString_array; +int lLogString_array_append(lLogString_array* array, lLogString* string); + typedef struct { lLogString logfolder; timer_array timers; + lLogString_array history; } Logger; int create_timer(Logger* logger); void start_timer(Logger* logger, int timer_id); void stop_timer(Logger* logger, int timer_id); -lLogString lLogString_new(const char* fmt, ...); +lLogString* lLogString_new(const char* fmt, ...); -void lLog(Logger logger, enum lLogLevel LOG_LEVEL, lLogString MESSAGE); +int lLog(Logger* logger, enum lLogLevel LOG_LEVEL, lLogString* MESSAGE); #endif \ No newline at end of file diff --git a/test/test.c b/test/test.c index 1e2d459..9217bb2 100644 --- a/test/test.c +++ b/test/test.c @@ -3,10 +3,12 @@ int main(void) { Logger logger = {0}; - lLog(logger, lINFO, lLogString_new("Hello, INFO!")); - lLog(logger, lWARNING, lLogString_new("Hello, WARNING!")); - lLog(logger, lERROR, lLogString_new("Hello, ERROR!")); - lLog(logger, lDEBUG, lLogString_new("Hello, DEBUG!")); + int message_1_id = lLog(&logger, lINFO, lLogString_new("Hello, INFO!")); + lLog(&logger, lINFO, logger.history.items[message_1_id]); + + int message_2_id = lLog(&logger, lWARNING, lLogString_new("Hello, WARNING!")); + int message_3_id = lLog(&logger, lERROR, lLogString_new("Hello, ERROR!")); + int message_4_id = lLog(&logger, lDEBUG, lLogString_new("Hello, DEBUG!")); int timer = create_timer(&logger); lTimespan* time_object = &logger.timers.items[timer].time; @@ -15,5 +17,5 @@ int main(void) { sleep(2); stop_timer(&logger, timer); - lLog(logger, lINFO, lLogString_new("%f seconds.", difftime(time_object->end, time_object->start))); + lLog(&logger, lINFO, lLogString_new("%f seconds.", difftime(time_object->end, time_object->start))); } \ No newline at end of file