#include "./logger.h" #include #include #include #include #include namespace fs = std::experimental::filesystem; const static std::string log_folder{"logs/"}; std::shared_ptr log_thread{nullptr}; std::shared_ptr logger::logger_general{nullptr}; std::shared_ptr logger::logger_network{nullptr}; std::shared_ptr logger::logger_dns{nullptr}; bool logger::setup(std::string& error) { try { if(!fs::exists(log_folder) && !fs::create_directories(log_folder)) { error = "failed to create directory " + log_folder; return false; } } catch(fs::filesystem_error& ex) { error = "failed to create log folder at " + log_folder + ": " + std::string{ex.what()}; return false; } std::vector sinks{}; sinks.reserve(2); { auto file_sink = std::make_shared(log_folder + "log", 0, 0); file_sink->set_level(spdlog::level::trace); sinks.push_back(file_sink); auto console_sink = std::make_shared(); console_sink->set_level(spdlog::level::trace); sinks.push_back(console_sink); } log_thread = std::make_shared(1024, 1); spdlog::register_logger(logger_general = std::make_shared("general", std::begin(sinks), std::end(sinks), log_thread, spdlog::async_overflow_policy::block)); spdlog::register_logger(logger_network = std::make_shared("network", std::begin(sinks), std::end(sinks), log_thread, spdlog::async_overflow_policy::block)); spdlog::register_logger(logger_dns = std::make_shared("dns ", std::begin(sinks), std::end(sinks), log_thread, spdlog::async_overflow_policy::block)); spdlog::apply_all([](const std::shared_ptr& l) { l->set_level(spdlog::level::trace); }); spdlog::flush_every(std::chrono::seconds(5)); return true; } bool logger::shutdown() { spdlog::drop_all(); return true; }