1

make logger static and add name wrapper

This commit is contained in:
2022-07-22 23:32:36 +02:00
parent 60a01461b0
commit ec09b0e6d2
2 changed files with 46 additions and 14 deletions

View File

@ -1,6 +1,7 @@
#include "user/lib/Logger.h"
#include "kernel/Globals.h"
SpinLock Logger::sem;
bool Logger::kout_enabled = true;
bool Logger::serial_enabled = true;
// const Semaphore Logger::sem = Semaphore(1);
@ -16,13 +17,11 @@ constexpr char* ansi_cyan = "\033[1;36m";
constexpr char* ansi_white = "\033[1;37m";
constexpr char* ansi_default = "\033[0;39m ";
// TODO: Lock this
void Logger::log(char* message, CGA::color col) const {
if (Logger::kout_enabled) {
CGA::color old_col = kout.color_fg;
kout << fgc(col)
<< Logger::level_to_string(this->current_message_level) << "::"
<< this->name << ":: "
<< message << fgc(old_col);
kout.flush(); // Don't add newline, Logger already does that
}
@ -44,8 +43,6 @@ void Logger::log(char* message, CGA::color col) const {
serial.write(ansi_default);
}
serial.write(Logger::level_to_string(this->current_message_level));
serial.write("::");
serial.write(this->name);
serial.write(":: ");
serial.write(message);
serial.write('\r');
@ -73,6 +70,7 @@ void Logger::flush() {
this->current_message_level = Logger::INFO;
this->pos = 0;
Logger::unlock();
}
void Logger::trace(char* message) const {

View File

@ -3,25 +3,31 @@
#include "devices/CGA.h"
#include "lib/OutStream.h"
// #include "lib/Semaphore.h"
#include "lib/SpinLock.h"
class Logger : public OutStream {
private:
Logger(const Logger& copy) = delete;
public:
static Logger& instance() {
static Logger log;
return log;
}
private:
Logger() = default;
Logger(const Logger& copy) = delete;
void operator=(const Logger& copy) = delete;
char* name;
static bool kout_enabled;
static bool serial_enabled;
// TODO: Don't mix logs
// static const Semaphore sem;
void log(char* message, CGA::color col) const;
public:
Logger(char* name) : name(name) {}
virtual ~Logger() = default;
friend class NamedLogger; // Allow NamedLogger to lock/unlock
static SpinLock sem;
static void lock() { Logger::sem.acquire(); }
static void unlock() { Logger::sem.release(); }
public:
enum LogLevel {
TRACE,
DEBUG,
@ -76,4 +82,32 @@ Logger& DEBUG(Logger& log);
Logger& ERROR(Logger& log);
Logger& INFO(Logger& log);
class NamedLogger {
private:
char* name;
public:
NamedLogger(char* name) : name(name) {}
Logger& trace() {
Logger::lock();
return Logger::instance() << TRACE << name << "::";
}
Logger& debug() {
Logger::lock();
return Logger::instance() << DEBUG << name << "::";
}
Logger& error() {
Logger::lock();
return Logger::instance() << ERROR << name << "::";
}
Logger& info() {
Logger::lock();
return Logger::instance() << INFO << name << "::";
}
};
#endif