Hookup raylib logger to engine logging

This commit is contained in:
2023-11-07 18:01:23 +01:00
parent 2d07a9f3aa
commit e66b313765
3 changed files with 67 additions and 21 deletions

View File

@@ -46,7 +46,7 @@ static const char *LEVEL_STRINGS[] = {
"TRACE", "TRACE",
"DEBUG", "DEBUG",
"INFO", "INFO",
"WARN", "WARNING",
"ERROR", "ERROR",
"FATAL" "FATAL"
}; };
@@ -60,9 +60,13 @@ static const char *LEVEL_COLORS[] = {
}; };
static void bzLoggerStdOutCallback(BzLoggerEvent *ev) { static void bzLoggerStdOutCallback(BzLoggerEvent *ev) {
va_list *ap = ev->apList; va_list *ap = ev->vaList;
fprintf(stderr, "%s %s%-5s\x1b[0m \x1b[90m%s:%d:\x1b[0m ", fprintf(stderr, "%s %s%-5s\x1b[0m ",ev->time,
ev->time, LEVEL_STRINGS[ev->level], LEVEL_COLORS[ev->level], ev->file, ev->line); 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); vfprintf(stderr, ev->fmt, *ap);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
fflush(stderr); fflush(stderr);
@@ -70,13 +74,22 @@ static void bzLoggerStdOutCallback(BzLoggerEvent *ev) {
static void bzLoggerFileCallback(BzLoggerEvent *ev) { static void bzLoggerFileCallback(BzLoggerEvent *ev) {
FILE *fp = ev->userData; FILE *fp = ev->userData;
va_list *ap = ev->apList; va_list *ap = ev->vaList;
fprintf(fp, "%s %-5s %s:%d: ", ev->time, LEVEL_STRINGS[ev->level], ev->file, ev->line); 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); vfprintf(fp, ev->fmt, *ap);
fflush(fp); fflush(fp);
} }
void bzLoggerLog(BzLoggerLevel level, const char *file, int line, const char *fmt, ...) { 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}; BzLoggerEvent event = {NULL, NULL, level, file, line, fmt};
const int loggerLevel = bzLoggerGetLevel(); 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) { if (!BZ_GET_LOGGER_MODULE()->silent && level <= loggerLevel) {
event.userData = stderr; event.userData = stderr;
va_list ap; event.vaList = va_list;
va_start(ap, fmt);
event.apList = &ap;
bzLoggerStdOutCallback(&event); bzLoggerStdOutCallback(&event);
va_end(ap);
} }
for (int i = 0; i < BZ_LOGGER_MAX_CALLBACKS; ++i) { 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) { if (level <= cb.level) {
event.userData = cb.userData; event.userData = cb.userData;
va_list ap; event.vaList = va_list;
va_start(ap, fmt);
event.apList = &ap;
cb.callback(&event); 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) { bool bzLoggerAddFP(void *fp, BzLoggerLevel level) {
return bzLoggerAddCB(&(BzLoggerCallback) { return bzLoggerAddCB(&(BzLoggerCallback) {

View File

@@ -7,7 +7,7 @@ typedef enum BzLoggerLevel {
BZ_LOG_TRACE, BZ_LOG_TRACE,
BZ_LOG_DEBUG, BZ_LOG_DEBUG,
BZ_LOG_INFO, BZ_LOG_INFO,
BZ_LOG_WARN, BZ_LOG_WARNING,
BZ_LOG_ERROR, BZ_LOG_ERROR,
BZ_LOG_FATAL, BZ_LOG_FATAL,
} BzLoggerLevel; } BzLoggerLevel;
@@ -21,7 +21,7 @@ typedef struct BzLoggerEvent {
int line; int line;
const char *fmt; const char *fmt;
void *apList; void *vaList;
} BzLoggerEvent; } BzLoggerEvent;
typedef struct BzLoggerCallback { typedef struct BzLoggerCallback {
@@ -39,6 +39,10 @@ void bzLoggerSetLevel(BzLoggerLevel level);
BzLoggerLevel bzLoggerGetLevel(); BzLoggerLevel bzLoggerGetLevel();
void bzLoggerLog(BzLoggerLevel level, const char *file, int line, const char *fmt, ...); 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 bzLoggerAddFP(void *fp, BzLoggerLevel level);
bool bzLoggerAddCB(const BzLoggerCallback *callback); bool bzLoggerAddCB(const BzLoggerCallback *callback);

View File

@@ -27,6 +27,34 @@ extern bool bzMain(BzAppDesc *appDesc, int argc, const char **argv);
#ifdef BZ_ENTRYPOINT #ifdef BZ_ENTRYPOINT
#include <raylib.h> #include <raylib.h>
// 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) { int main(int argc, const char **argv) {
if (!bzLoggerInit()) if (!bzLoggerInit())
@@ -34,6 +62,8 @@ int main(int argc, const char **argv) {
bzLoggerSetLevel(BZ_LOG_INFO); bzLoggerSetLevel(BZ_LOG_INFO);
bzLogInfo("[Breeze] Logger initialized successfully."); bzLogInfo("[Breeze] Logger initialized successfully.");
SetTraceLogCallback(bzRaylibLogger);
BzAppDesc appDesc = { BzAppDesc appDesc = {
1280, 1280,
720, 720,