From faed79c653c53d749b70825de7d47ac7c9a39f1a Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Sat, 18 Feb 2023 13:54:57 +0100 Subject: [PATCH] Spectre/System/Log: Support Writer interface. --- include/Spectre/System/Log.h | 6 ++++++ source/System/Log.cpp | 18 ++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/include/Spectre/System/Log.h b/include/Spectre/System/Log.h index 51c0e14..b1adc0a 100644 --- a/include/Spectre/System/Log.h +++ b/include/Spectre/System/Log.h @@ -7,6 +7,8 @@ namespace sp { +namespace log { class Writer; } + class Log { public : @@ -18,6 +20,8 @@ public : T_DEBUG = 1 << 3 }; + static void setWriter(log::Writer* writer); + static void info(const char *format, ...); static void warn(const char *format, ...); @@ -29,6 +33,8 @@ public : private : static void writeln(Type type, const char *fmt, va_list args); + + static log::Writer* _writer; }; } // namespace sp diff --git a/source/System/Log.cpp b/source/System/Log.cpp index 52bfe92..b2d9226 100644 --- a/source/System/Log.cpp +++ b/source/System/Log.cpp @@ -2,10 +2,18 @@ #include #include #include +#include namespace sp { +log::Writer* Log::_writer; + +void Log::setWriter(log::Writer* writer) +{ + _writer = writer; +} + void Log::info(const char *format, ...) { va_list vl; @@ -48,13 +56,13 @@ void Log::debug(const char *format, ...) void Log::writeln(Type type, const char *format, va_list args) { - FILE *fd = stderr; + int len; + static char msg[4096]; static char buf[4096]; const char *prefix; switch(type) { case T_INFO : - fd = stdout; prefix = "INFO"; break; case T_WARNING : @@ -73,8 +81,10 @@ void Log::writeln(Type type, const char *format, va_list args) break; } - vsnprintf(buf, sizeof(buf), format, args); - fprintf(fd, "%s: %s\n", prefix, buf); + vsnprintf(msg, sizeof(msg), format, args); + len = sprintf(buf, "%s: %s\n", prefix, msg); + + _writer->write(buf, len); } } // namespace sp