Files
lzwc-terminal-unitreeGo2/include/logger.hpp
Sucan126 c5cff9fbdb feat(low_controller): Integrate LowController for low-level command handling
- Added LowController class to manage low-level commands and communication.
- Updated CustomRobot to initialize and manage LowController, including methods for processing low-level commands.
- Enhanced logger functionality with variadic template methods for formatted logging.
- Updated CMakeLists.txt to include the new low_controller.cpp source file and low_controller.hpp header.
2025-09-22 19:11:20 +08:00

65 lines
1.7 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);
template<typename... Args>
void log(LogLevel level, const char* format, Args... args);
template<typename... Args>
void debug(const char* format, Args... args);
template<typename... Args>
void info(const char* format, Args... args);
template<typename... Args>
void warn(const char* format, Args... args);
template<typename... Args>
void error(const char* format, Args... args);
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, ...) custom::Logger::getInstance().debug(msg, ##__VA_ARGS__)
#define LOG_INFO(msg, ...) custom::Logger::getInstance().info(msg, ##__VA_ARGS__)
#define LOG_WARN(msg, ...) custom::Logger::getInstance().warn(msg, ##__VA_ARGS__)
#define LOG_ERROR(msg, ...) custom::Logger::getInstance().error(msg, ##__VA_ARGS__)
} // namespace custom