#ifndef CHIP8_LOGGER_H #define CHIP8_LOGGER_H #include #include #include "date.h" enum LogType { INFO, DEBUG, WARN, ERROR }; class Logger { private: static const char* logTypeToString(LogType logType) { switch (logType) { case LogType::INFO: return "INFO"; case LogType::DEBUG: return "DEBUG"; case LogType::WARN: return "WARN"; case LogType::ERROR: return "ERROR"; } return ""; } public: template static void log(LogType logType, Args&&... args) { std::ostream& stream = (logType == LogType::ERROR) ? std::cerr : std::cout; stream << "[" << logTypeToString(logType) << "] [" << Date::now().to_string() << "]"; ((stream << " " << args), ...); stream << std::endl; } template static void info(Args&&... args) { log(LogType::INFO, std::forward(args)...); } template static void debug(Args&&... args) { log(LogType::DEBUG, std::forward(args)...); } template static void warn(Args&&... args) { log(LogType::WARN, std::forward(args)...); } template static void error(Args&&... args) { log(LogType::ERROR, std::forward(args)...); } }; #endif //CHIP8_LOGGER_H