mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-05 11:01:49 +00:00
59 lines
1.3 KiB
C++
59 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <sstream>
|
|
|
|
namespace debug {
|
|
enum class LogLevel { print, debug, info, warning, error };
|
|
|
|
class Logger;
|
|
|
|
class LogMessage {
|
|
Logger* logger;
|
|
LogLevel level;
|
|
std::stringstream ss;
|
|
public:
|
|
LogMessage(Logger* logger, LogLevel level)
|
|
: logger(logger), level(level) {
|
|
}
|
|
~LogMessage();
|
|
|
|
template <class T>
|
|
LogMessage& operator<<(const T& x) {
|
|
ss << x;
|
|
return *this;
|
|
}
|
|
};
|
|
|
|
class Logger {
|
|
std::string name;
|
|
public:
|
|
static void init(const std::string& filename);
|
|
static void flush();
|
|
|
|
Logger(const std::string& name) : name(name) {
|
|
}
|
|
|
|
void log(LogLevel level, std::string message);
|
|
|
|
LogMessage debug() {
|
|
return LogMessage(this, LogLevel::debug);
|
|
}
|
|
|
|
LogMessage info() {
|
|
return LogMessage(this, LogLevel::info);
|
|
}
|
|
|
|
LogMessage error() {
|
|
return LogMessage(this, LogLevel::error);
|
|
}
|
|
|
|
LogMessage warning() {
|
|
return LogMessage(this, LogLevel::warning);
|
|
}
|
|
|
|
/// @brief Print-debugging tool (printed without header)
|
|
LogMessage print() {
|
|
return LogMessage(this, LogLevel::print);
|
|
}
|
|
};
|
|
}
|