#include "applog.h" #include "spdlog/spdlog.h" #include "spdlog/async.h" #include "spdlog/sinks/stdout_color_sinks.h" #include "spdlog/sinks/basic_file_sink.h" #include "spdlog/sinks/rotating_file_sink.h" #include "stringex.h" #include #include inline std::string string_toupper(const std::string& str) { std::string s = str; transform(s.begin(), s.end(), s.begin(), toupper); return s; } void log_init(const std::string& name, bool benv) { if(spdlog::get(name)) return; const auto max_size = 1048576 * 5; const auto max_files = 3; auto file_sink = std::make_shared("logs/"+name+".log", max_size, max_files); file_sink->set_level(spdlog::level::info); auto logger = std::shared_ptr(new spdlog::logger("logs/" + name+".log", {file_sink})); spdlog::register_logger(logger); } void log_info(const std::string& name, const std::string& msg) { if(auto log = spdlog::get("logs/" + name + ".log")) { log->info(msg); log->flush(); } } void log_warn(const std::string& name, const std::string& msg) { if (auto log = spdlog::get("logs/" + name + ".log")) { log->warn(msg); log->flush(); } } void log_trace(const std::string& name, const std::string& msg) { if (auto log = spdlog::get("logs/" + name + ".log")) { log->trace(msg); log->flush(); } } void log_debug(const std::string& name, const std::string& msg) { if (auto log = spdlog::get("logs/" + name + ".log")) { log->debug(msg); log->flush(); } } void log_error(const std::string& name, const std::string& msg) { if (auto log = spdlog::get("logs/" + name + ".log")) { log->error(msg); log->flush(); } } void log_critical(const std::string name, const std::string& msg) { if (auto log = spdlog::get("logs/" + name + ".log")) { log->critical(msg); log->flush(); } } bool log_set_level(const std::string& name, int type ,int level) { if (auto log = spdlog::get("logs/" + name + ".log")) { spdlog::level::level_enum actLevel = (spdlog::level::level_enum)std::min(std::max((int)spdlog::level::trace, level), (int)spdlog::level::off); if(type < log->sinks().size()) log->sinks()[type]->set_level(actLevel); else log->set_level(actLevel); return true; } return false; } bool log_get_level(const std::string& name, int type ,int& level) { if (auto log = spdlog::get("logs/" + name + ".log")) { if(type < log->sinks().size()) level = log->sinks()[type]->level(); else level = log->level(); return true; } return false; }