11#include <spdlog/async.h>
12#include <spdlog/sinks/rotating_file_sink.h>
13#include <spdlog/sinks/stdout_color_sinks.h>
14#include <spdlog/spdlog.h>
23 if (!std::filesystem::exists(logdir)) {
24 std::filesystem::create_directories(logdir);
25 }
else if (!std::filesystem::is_directory(logdir)) {
26 throw std::runtime_error(
"Log path is not a directory.");
31 static std::once_flag flag_default_logger;
32 std::call_once(flag_default_logger, [&logfile] {
33 spdlog::init_thread_pool(8192, 1);
35 std::make_shared<spdlog::sinks::stdout_color_sink_mt>(spdlog::color_mode::always);
36 auto file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>(logfile.string(),
38 std::vector<spdlog::sink_ptr> sinks{stdout_sink, file_sink};
39 auto logger = std::make_shared<spdlog::async_logger>(
"logger", sinks.begin(), sinks.end(),
40 spdlog::thread_pool(),
41 spdlog::async_overflow_policy::block);
42 logger->set_pattern(
"[%Y-%m-%d %H:%M:%S.%e %t] [%^%l%$] [%s:%#] %v");
43 spdlog::set_default_logger(logger);
45 const char *log_level = std::getenv(
"SPDLOG_LEVEL");
46 if (log_level !=
nullptr) {
47 spdlog::set_level(spdlog::level::from_str(log_level));
std::filesystem::path get_cache_directory()