Files
lzwc-terminal-unitreeGo2/include/logger.hpp

54 lines
1.2 KiB
C++

#pragma once
#include <string>
#include <fstream>
#include <memory>
#include <mutex>
#include <sstream>
#include <chrono>
#include <iomanip>
namespace custom {
enum class LogLevel {
DEBUG = 0,
INFO = 1,
WARN = 2,
ERROR = 3
};
class Logger {
public:
static Logger& getInstance();
void setLevel(LogLevel level);
void setLogFile(const std::string& filename);
void log(LogLevel level, const std::string& message);
void debug(const std::string& message);
void info(const std::string& message);
void warn(const std::string& message);
void error(const std::string& message);
private:
Logger() = default;
~Logger() = default;
Logger(const Logger&) = delete;
Logger& operator=(const Logger&) = delete;
std::string getCurrentTime();
std::string levelToString(LogLevel level);
LogLevel currentLevel_ = LogLevel::INFO;
std::unique_ptr<std::ofstream> logFile_;
std::mutex logMutex_;
};
// Convenience macros
#define LOG_DEBUG(msg) Logger::getInstance().debug(msg)
#define LOG_INFO(msg) Logger::getInstance().info(msg)
#define LOG_WARN(msg) Logger::getInstance().warn(msg)
#define LOG_ERROR(msg) Logger::getInstance().error(msg)
} // namespace custom