From 52a01b2cf2085399a3ede5480fcd1f74c5331b42 Mon Sep 17 00:00:00 2001 From: Philip Miller Date: Thu, 6 Sep 2018 02:47:48 -0400 Subject: [PATCH] add argument to rotating file sink for rotate_on_open when true, the log file will be rotated when it is opened so the newly constructed file will start off being empty --- include/spdlog/sinks/rotating_file_sink.h | 12 +++++++----- tests/file_log.cpp | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/include/spdlog/sinks/rotating_file_sink.h b/include/spdlog/sinks/rotating_file_sink.h index 7ed2385a..bd6582cd 100644 --- a/include/spdlog/sinks/rotating_file_sink.h +++ b/include/spdlog/sinks/rotating_file_sink.h @@ -27,12 +27,14 @@ template class rotating_file_sink SPDLOG_FINAL : public base_sink { public: - rotating_file_sink(filename_t base_filename, std::size_t max_size, std::size_t max_files) + rotating_file_sink(filename_t base_filename, std::size_t max_size, std::size_t max_files, bool rotate_on_open=false) : base_filename_(std::move(base_filename)) , max_size_(max_size) , max_files_(max_files) { file_helper_.open(calc_filename(base_filename_, 0)); + if (rotate_on_open) + rotate_(); current_size_ = file_helper_.size(); // expensive. called only once } @@ -130,15 +132,15 @@ using rotating_file_sink_st = rotating_file_sink; template inline std::shared_ptr rotating_logger_mt( - const std::string &logger_name, const filename_t &filename, size_t max_file_size, size_t max_files) + const std::string &logger_name, const filename_t &filename, size_t max_file_size, size_t max_files, bool rotate_on_open=false) { - return Factory::template create(logger_name, filename, max_file_size, max_files); + return Factory::template create(logger_name, filename, max_file_size, max_files, rotate_on_open); } template inline std::shared_ptr rotating_logger_st( - const std::string &logger_name, const filename_t &filename, size_t max_file_size, size_t max_files) + const std::string &logger_name, const filename_t &filename, size_t max_file_size, size_t max_files, bool rotate_on_open = false) { - return Factory::template create(logger_name, filename, max_file_size, max_files); + return Factory::template create(logger_name, filename, max_file_size, max_files, rotate_on_open); } } // namespace spdlog diff --git a/tests/file_log.cpp b/tests/file_log.cpp index ace4c065..dbaab390 100644 --- a/tests/file_log.cpp +++ b/tests/file_log.cpp @@ -60,7 +60,7 @@ TEST_CASE("rotating_file_logger2", "[rotating_logger]]") prepare_logdir(); size_t max_size = 1024 * 10; std::string basename = "logs/rotating_log"; - auto logger = spdlog::rotating_logger_mt("logger", basename, max_size, 1); + auto logger = spdlog::rotating_logger_mt("logger", basename, max_size, 1, true); for (int i = 0; i < 10; ++i) logger->info("Test message {}", i);