make logger static and add name wrapper
This commit is contained in:
@ -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
|
||||
|
||||
Reference in New Issue
Block a user