36 spdlog::init_thread_pool(8192, 1);
39 auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
40 console_sink->set_level(spdlog::level::trace);
41 console_sink->set_color(spdlog::level::trace,
TRACE_COLOR);
42 console_sink->set_color(spdlog::level::warn,
WARN_COLOR);
43 console_sink->set_color(spdlog::level::err,
ERROR_COLOR);
44 console_sink->set_color(spdlog::level::critical,
CRITIC_COLOR);
48 namespace fs = std::filesystem;
50 fs::create_directories(
"logs", ec);
52 std::vector<fs::path> sessions;
53 for (
auto& e : fs::directory_iterator(
"logs", ec))
54 if (e.is_regular_file() && e.path().extension() ==
".log" &&
55 e.path().filename() !=
"latest.log")
56 sessions.push_back(e.path());
57 std::sort(sessions.begin(), sessions.end());
58 while (sessions.size() >= 10) {
59 fs::remove(sessions.front(), ec);
60 sessions.erase(sessions.begin());
64 std::time_t now = std::time(
nullptr);
65 std::strftime(stamp,
sizeof(stamp),
"%Y%m%d_%H%M%S", std::localtime(&now));
66 std::string logPath =
"logs/" + ProjectName +
"_" + stamp +
".log";
69 std::make_shared<spdlog::sinks::basic_file_sink_mt>(logPath,
true);
73 fs::remove(
"logs/latest.log", ec);
74 fs::create_symlink(fs::path(logPath).filename(),
"logs/latest.log", ec);
78 std::make_shared<spdlog::sinks::basic_file_sink_mt>(
"Engine.log",
true);
82 std::vector<spdlog::sink_ptr> sinks{console_sink, file_sink};
85 CoreLogger = std::make_shared<spdlog::async_logger>(
86 "Sleak Engine", sinks.begin(), sinks.end(), spdlog::thread_pool());
87 GameLogger = std::make_shared<spdlog::async_logger>(
88 ProjectName, sinks.begin(), sinks.end(), spdlog::thread_pool());
90 CoreLogger->set_level(spdlog::level::trace);
91 GameLogger->set_level(spdlog::level::trace);
94 CoreLogger->flush_on(spdlog::level::err);
95 GameLogger->flush_on(spdlog::level::err);
96 spdlog::flush_every(std::chrono::seconds(1));
98 spdlog::register_logger(CoreLogger);
99 spdlog::register_logger(GameLogger);