123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- #include "LogOutput.h"
- #include <spdlog/sinks/stdout_sinks.h>
- #include <spdlog/sinks/basic_file_sink.h>
- #include <spdlog/sinks/null_sink.h>
- #include <fstream>
- #include <json.hpp>
- // 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<spdlog::sinks::stdout_sink_st>();
- auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_st>(LogConfig.fileOut_v, false);
- auto null_sink = std::make_shared<spdlog::sinks::null_sink_st>();
- 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;
- }
- }
|