diff --git a/engine/breeze/core/logger.c b/engine/breeze/core/logger.c index bb341db..8d4e06c 100644 --- a/engine/breeze/core/logger.c +++ b/engine/breeze/core/logger.c @@ -46,7 +46,7 @@ static const char *LEVEL_STRINGS[] = { "TRACE", "DEBUG", "INFO", - "WARN", + "WARNING", "ERROR", "FATAL" }; @@ -60,9 +60,13 @@ static const char *LEVEL_COLORS[] = { }; static void bzLoggerStdOutCallback(BzLoggerEvent *ev) { - va_list *ap = ev->apList; - fprintf(stderr, "%s %s%-5s\x1b[0m \x1b[90m%s:%d:\x1b[0m ", - ev->time, LEVEL_STRINGS[ev->level], LEVEL_COLORS[ev->level], ev->file, ev->line); + va_list *ap = ev->vaList; + fprintf(stderr, "%s %s%-5s\x1b[0m ",ev->time, + LEVEL_COLORS[ev->level], LEVEL_STRINGS[ev->level]); + if (ev->file) { + fprintf(stderr, "\x1b[90m(%s:%d)\x1b[0m ", + ev->file, ev->line); + } vfprintf(stderr, ev->fmt, *ap); fprintf(stderr, "\n"); fflush(stderr); @@ -70,13 +74,22 @@ static void bzLoggerStdOutCallback(BzLoggerEvent *ev) { static void bzLoggerFileCallback(BzLoggerEvent *ev) { FILE *fp = ev->userData; - va_list *ap = ev->apList; - fprintf(fp, "%s %-5s %s:%d: ", ev->time, LEVEL_STRINGS[ev->level], ev->file, ev->line); + va_list *ap = ev->vaList; + fprintf(fp, "%s %-5s ", ev->time, LEVEL_STRINGS[ev->level]); + if (ev->file) { + fprintf(fp, "(%s:%d): ", ev->file, ev->line); + } vfprintf(fp, ev->fmt, *ap); fflush(fp); } void bzLoggerLog(BzLoggerLevel level, const char *file, int line, const char *fmt, ...) { + va_list args; + va_start(args, fmt); + bzLoggerLogV(level, file, line, fmt, &args); + va_end(args); +} +void bzLoggerLogV(BzLoggerLevel level, const char *file, int line, const char *fmt, void *va_list) { BzLoggerEvent event = {NULL, NULL, level, file, line, fmt}; const int loggerLevel = bzLoggerGetLevel(); @@ -90,13 +103,8 @@ void bzLoggerLog(BzLoggerLevel level, const char *file, int line, const char *fm if (!BZ_GET_LOGGER_MODULE()->silent && level <= loggerLevel) { event.userData = stderr; - va_list ap; - va_start(ap, fmt); - - event.apList = ≈ + event.vaList = va_list; bzLoggerStdOutCallback(&event); - - va_end(ap); } for (int i = 0; i < BZ_LOGGER_MAX_CALLBACKS; ++i) { @@ -105,17 +113,21 @@ void bzLoggerLog(BzLoggerLevel level, const char *file, int line, const char *fm if (level <= cb.level) { event.userData = cb.userData; - va_list ap; - va_start(ap, fmt); - - event.apList = ≈ + event.vaList = va_list; cb.callback(&event); - - va_end(ap); } } - } +void bzLoggerOnlyLog(BzLoggerLevel level, const char *fmt, ...) { + va_list args; + va_start(args, fmt); + bzLoggerOnlyLogV(level, fmt, &args); + va_end(args); +} +void bzLoggerOnlyLogV(BzLoggerLevel level, const char *fmt, void *va_list) { + bzLoggerLogV(level, NULL, -1, fmt, va_list); +} + bool bzLoggerAddFP(void *fp, BzLoggerLevel level) { return bzLoggerAddCB(&(BzLoggerCallback) { diff --git a/engine/breeze/core/logger.h b/engine/breeze/core/logger.h index 8306087..bc9d301 100644 --- a/engine/breeze/core/logger.h +++ b/engine/breeze/core/logger.h @@ -7,7 +7,7 @@ typedef enum BzLoggerLevel { BZ_LOG_TRACE, BZ_LOG_DEBUG, BZ_LOG_INFO, - BZ_LOG_WARN, + BZ_LOG_WARNING, BZ_LOG_ERROR, BZ_LOG_FATAL, } BzLoggerLevel; @@ -21,7 +21,7 @@ typedef struct BzLoggerEvent { int line; const char *fmt; - void *apList; + void *vaList; } BzLoggerEvent; typedef struct BzLoggerCallback { @@ -39,6 +39,10 @@ void bzLoggerSetLevel(BzLoggerLevel level); BzLoggerLevel bzLoggerGetLevel(); void bzLoggerLog(BzLoggerLevel level, const char *file, int line, const char *fmt, ...); +void bzLoggerLogV(BzLoggerLevel level, const char *file, int line, const char *fmt, void *va_list); +void bzLoggerOnlyLog(BzLoggerLevel level, const char *fmt, ...); +void bzLoggerOnlyLogV(BzLoggerLevel level, const char *fmt, void *va_list); + bool bzLoggerAddFP(void *fp, BzLoggerLevel level); bool bzLoggerAddCB(const BzLoggerCallback *callback); diff --git a/engine/breeze/game.h b/engine/breeze/game.h index 5730541..39a1932 100644 --- a/engine/breeze/game.h +++ b/engine/breeze/game.h @@ -27,6 +27,34 @@ extern bool bzMain(BzAppDesc *appDesc, int argc, const char **argv); #ifdef BZ_ENTRYPOINT #include +// https://www.raylib.com/examples/core/loader.html?name=core_custom_logging +static void bzRaylibLogger(int msgType, const char *text, va_list args) { + BzLoggerLevel level = BZ_LOG_TRACE; + // translate log + switch (msgType) { + case LOG_TRACE: + level = BZ_LOG_TRACE; + break; + case LOG_DEBUG: + level = BZ_LOG_DEBUG; + break; + case LOG_INFO: + level = BZ_LOG_INFO; + break; + case LOG_WARNING: + level = BZ_LOG_WARNING; + break; + case LOG_ERROR: + level = BZ_LOG_ERROR; + break; + case LOG_FATAL: + level = BZ_LOG_FATAL; + break; + default:; + } + + bzLoggerOnlyLog(level, text, args); +} int main(int argc, const char **argv) { if (!bzLoggerInit()) @@ -34,6 +62,8 @@ int main(int argc, const char **argv) { bzLoggerSetLevel(BZ_LOG_INFO); bzLogInfo("[Breeze] Logger initialized successfully."); + SetTraceLogCallback(bzRaylibLogger); + BzAppDesc appDesc = { 1280, 720,