Hookup raylib logger to engine logging
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -27,6 +27,34 @@ extern bool bzMain(BzAppDesc *appDesc, int argc, const char **argv);
|
||||
#ifdef BZ_ENTRYPOINT
|
||||
#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) {
|
||||
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,
|
||||
|
||||
Reference in New Issue
Block a user