rotate log files (#2283)

Fixes #1228 (wow only took 1 year)
This commit is contained in:
ManDude
2023-02-26 22:56:25 +00:00
committed by GitHub
parent 736a3a8b7c
commit fb20bf34df
3 changed files with 30 additions and 0 deletions
+19
View File
@@ -108,9 +108,28 @@ void log_print(const char* message) {
}
} // namespace internal
// how many extra log files for a single program should be kept?
constexpr int LOG_ROTATE_MAX = 5;
void set_file(const std::string& filename) {
ASSERT(!gLogger.fp);
file_util::create_dir_if_needed_for_file(filename);
// rotate files. log.txt is the current one, log.1.txt is the previous one, etc.
auto as_path = fs::path(filename);
auto stem = as_path.stem().string();
auto ext = as_path.extension().string();
auto dir = as_path.parent_path();
for (int i = LOG_ROTATE_MAX; i-- > 0;) {
auto src_name = i != 0 ? fmt::format("{}.{}{}", stem, i, ext) : fmt::format("{}{}", stem, ext);
auto src_path = dir / src_name;
if (file_util::file_exists(src_path.string())) {
auto dst_name = fmt::format("{}.{}{}", stem, i + 1, ext);
auto dst_path = dir / dst_name;
file_util::copy_file(src_path, dst_path);
}
}
gLogger.fp = file_util::open_file(filename.c_str(), "w");
ASSERT(gLogger.fp);
}