make logger static and add name wrapper
This commit is contained in:
@ -1,6 +1,7 @@
|
|||||||
#include "user/lib/Logger.h"
|
#include "user/lib/Logger.h"
|
||||||
#include "kernel/Globals.h"
|
#include "kernel/Globals.h"
|
||||||
|
|
||||||
|
SpinLock Logger::sem;
|
||||||
bool Logger::kout_enabled = true;
|
bool Logger::kout_enabled = true;
|
||||||
bool Logger::serial_enabled = true;
|
bool Logger::serial_enabled = true;
|
||||||
// const Semaphore Logger::sem = Semaphore(1);
|
// 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_white = "\033[1;37m";
|
||||||
constexpr char* ansi_default = "\033[0;39m ";
|
constexpr char* ansi_default = "\033[0;39m ";
|
||||||
|
|
||||||
// TODO: Lock this
|
|
||||||
void Logger::log(char* message, CGA::color col) const {
|
void Logger::log(char* message, CGA::color col) const {
|
||||||
if (Logger::kout_enabled) {
|
if (Logger::kout_enabled) {
|
||||||
CGA::color old_col = kout.color_fg;
|
CGA::color old_col = kout.color_fg;
|
||||||
kout << fgc(col)
|
kout << fgc(col)
|
||||||
<< Logger::level_to_string(this->current_message_level) << "::"
|
<< Logger::level_to_string(this->current_message_level) << "::"
|
||||||
<< this->name << ":: "
|
|
||||||
<< message << fgc(old_col);
|
<< message << fgc(old_col);
|
||||||
kout.flush(); // Don't add newline, Logger already does that
|
kout.flush(); // Don't add newline, Logger already does that
|
||||||
}
|
}
|
||||||
@ -45,8 +44,6 @@ void Logger::log(char* message, CGA::color col) const {
|
|||||||
}
|
}
|
||||||
serial.write(Logger::level_to_string(this->current_message_level));
|
serial.write(Logger::level_to_string(this->current_message_level));
|
||||||
serial.write(":: ");
|
serial.write(":: ");
|
||||||
serial.write(this->name);
|
|
||||||
serial.write(":: ");
|
|
||||||
serial.write(message);
|
serial.write(message);
|
||||||
serial.write('\r');
|
serial.write('\r');
|
||||||
// serial.write("\r\n");
|
// serial.write("\r\n");
|
||||||
@ -73,6 +70,7 @@ void Logger::flush() {
|
|||||||
|
|
||||||
this->current_message_level = Logger::INFO;
|
this->current_message_level = Logger::INFO;
|
||||||
this->pos = 0;
|
this->pos = 0;
|
||||||
|
Logger::unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Logger::trace(char* message) const {
|
void Logger::trace(char* message) const {
|
||||||
|
|||||||
@ -3,25 +3,31 @@
|
|||||||
|
|
||||||
#include "devices/CGA.h"
|
#include "devices/CGA.h"
|
||||||
#include "lib/OutStream.h"
|
#include "lib/OutStream.h"
|
||||||
// #include "lib/Semaphore.h"
|
#include "lib/SpinLock.h"
|
||||||
|
|
||||||
class Logger : public OutStream {
|
class Logger : public OutStream {
|
||||||
private:
|
public:
|
||||||
Logger(const Logger& copy) = delete;
|
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 kout_enabled;
|
||||||
static bool serial_enabled;
|
static bool serial_enabled;
|
||||||
|
|
||||||
// TODO: Don't mix logs
|
|
||||||
// static const Semaphore sem;
|
|
||||||
|
|
||||||
void log(char* message, CGA::color col) const;
|
void log(char* message, CGA::color col) const;
|
||||||
|
|
||||||
public:
|
friend class NamedLogger; // Allow NamedLogger to lock/unlock
|
||||||
Logger(char* name) : name(name) {}
|
static SpinLock sem;
|
||||||
virtual ~Logger() = default;
|
static void lock() { Logger::sem.acquire(); }
|
||||||
|
static void unlock() { Logger::sem.release(); }
|
||||||
|
|
||||||
|
public:
|
||||||
enum LogLevel {
|
enum LogLevel {
|
||||||
TRACE,
|
TRACE,
|
||||||
DEBUG,
|
DEBUG,
|
||||||
@ -76,4 +82,32 @@ Logger& DEBUG(Logger& log);
|
|||||||
Logger& ERROR(Logger& log);
|
Logger& ERROR(Logger& log);
|
||||||
Logger& INFO(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
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user