mirror of
https://github.com/open-goal/jak-project
synced 2026-06-14 22:29:25 -04:00
@@ -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);
|
||||
}
|
||||
|
||||
@@ -584,4 +584,13 @@ std::vector<fs::path> find_directories_in_dir(const fs::path& base_dir) {
|
||||
return dirs;
|
||||
}
|
||||
|
||||
void copy_file(const fs::path& src, const fs::path& dst) {
|
||||
if (src == dst) {
|
||||
lg::error("Failed to copy_file {}, source and destination are the same\n", src.string());
|
||||
throw std::runtime_error("Failed to copy_file");
|
||||
}
|
||||
auto data = read_binary_file(src);
|
||||
write_binary_file(dst, data.data(), data.size());
|
||||
}
|
||||
|
||||
} // namespace file_util
|
||||
|
||||
@@ -63,4 +63,6 @@ std::vector<u8> decompress_dgo(const std::vector<u8>& data_in);
|
||||
FILE* open_file(const fs::path& path, const std::string& mode);
|
||||
std::vector<fs::path> find_files_recursively(const fs::path& base_dir, const std::regex& pattern);
|
||||
std::vector<fs::path> find_directories_in_dir(const fs::path& base_dir);
|
||||
// writes the contents of one file to another
|
||||
void copy_file(const fs::path& src, const fs::path& dst);
|
||||
} // namespace file_util
|
||||
|
||||
Reference in New Issue
Block a user