initial commit
This commit is contained in:
59
include/log.hpp
Normal file
59
include/log.hpp
Normal file
@@ -0,0 +1,59 @@
|
||||
#pragma once
|
||||
|
||||
#include <functional>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
enum class LogLevel { debug = 0, info = 1, warning = 2, error = 3 };
|
||||
|
||||
class DaliLog {
|
||||
public:
|
||||
static DaliLog& instance() {
|
||||
static DaliLog inst;
|
||||
return inst;
|
||||
}
|
||||
|
||||
void setLevel(LogLevel level) {
|
||||
std::lock_guard<std::mutex> lock(mu_);
|
||||
level_ = level;
|
||||
}
|
||||
|
||||
LogLevel currentLevel() const { return level_; }
|
||||
|
||||
void setSink(std::function<void(const std::string&)> sink) {
|
||||
std::lock_guard<std::mutex> lock(mu_);
|
||||
sink_ = std::move(sink);
|
||||
}
|
||||
|
||||
void debugLog(const std::string& message) { log(LogLevel::debug, "DEBUG", message); }
|
||||
void infoLog(const std::string& message) { log(LogLevel::info, "INFO", message); }
|
||||
void warningLog(const std::string& message) { log(LogLevel::warning, "WARNING", message); }
|
||||
void errorLog(const std::string& message) { log(LogLevel::error, "ERROR", message); }
|
||||
|
||||
std::vector<std::string> logMessages() const {
|
||||
std::lock_guard<std::mutex> lock(mu_);
|
||||
return logs_;
|
||||
}
|
||||
|
||||
void clearLogs() {
|
||||
std::lock_guard<std::mutex> lock(mu_);
|
||||
logs_.clear();
|
||||
}
|
||||
|
||||
private:
|
||||
DaliLog() = default;
|
||||
|
||||
void log(LogLevel level, const char* tag, const std::string& message) {
|
||||
std::lock_guard<std::mutex> lock(mu_);
|
||||
if (static_cast<int>(level) < static_cast<int>(level_)) return;
|
||||
const std::string line = std::string("[") + tag + "] " + message;
|
||||
logs_.push_back(line);
|
||||
if (sink_) sink_(line);
|
||||
}
|
||||
|
||||
mutable std::mutex mu_;
|
||||
LogLevel level_ = LogLevel::info;
|
||||
std::vector<std::string> logs_;
|
||||
std::function<void(const std::string&)> sink_;
|
||||
};
|
||||
Reference in New Issue
Block a user