#include "LogOutput.h" #include #include #include #include #include // console 0 // file 1 // console and file 2 // null 3 // trace 0 // debug 1 // info 2 // warn 3 // err 4 // critical 5 // off 6 // n_levels 7 LogOutput::LogOutput(std::string instance, LogConfiguration LogConfig) { InitLog(instance, LogConfig); } LogOutput::LogOutput() { } LogOutput::~LogOutput() { } bool LogOutput::E_File(bool isOpen, std::string FileName) { if (!isOpen) { log_sink->error(util::Format("{0} file not found", FileName)); } return isOpen; } bool LogOutput::W_File(bool isOpen, std::string FileName) { if (!isOpen) { log_sink->warn(util::Format("{0} file not found", FileName)); } return isOpen; } void LogOutput::InitLog(std::string instance, LogConfiguration LogConfig) { auto console_sink = std::make_shared(); auto file_sink = std::make_shared(LogConfig.fileOut_v, false); auto null_sink = std::make_shared(); console_sink->set_level(spdlog::level::level_enum(LogConfig.level_v)); file_sink->set_level(spdlog::level::level_enum(LogConfig.level_v)); console_sink->set_pattern(LogConfig.pattern_v); file_sink->set_pattern(LogConfig.pattern_v); switch (LogConfig.sink_v) { case 0: log_sink = new spdlog::logger(instance, {console_sink}); break; case 1: log_sink = new spdlog::logger(instance, {file_sink}); break; case 2: log_sink = new spdlog::logger(instance, {file_sink, console_sink}); break; case 3: log_sink = new spdlog::logger(instance, {null_sink}); break; } log_sink->flush_on(spdlog::level::info); } bool LogConfiguration::FromFile(std::string file_path) { std::ifstream logConfig(file_path); if (logConfig.is_open()) { nlohmann::json logJson; logConfig >> logJson; if (logJson.contains("sink")) { sink_v = logJson["sink"]; } if (logJson.contains("fileOut")) { fileOut_v = logJson["fileOut"]; } if (logJson.contains("level")) { level_v = logJson["level"]; } if (logJson.contains("pattern")) { pattern_v = logJson["pattern"]; } logConfig.close(); return true; } else { return false; } }