Allow manual rotation of rotating_file_sink

pull/3269/head
Huw Smithson 9 months ago
parent 15f539685b
commit 975cdf6b94

@ -69,6 +69,12 @@ SPDLOG_INLINE filename_t rotating_file_sink<Mutex>::filename() {
return file_helper_.filename();
}
template <typename Mutex>
SPDLOG_INLINE void rotating_file_sink<Mutex>::force_rotation() {
SPDLOG_TRY { rotate_(); }
SPDLOG_CATCH_STD
}
template <typename Mutex>
SPDLOG_INLINE void rotating_file_sink<Mutex>::sink_it_(const details::log_msg &msg) {
memory_buf_t formatted;

@ -28,6 +28,7 @@ public:
const file_event_handlers &event_handlers = {});
static filename_t calc_filename(const filename_t &filename, std::size_t index);
filename_t filename();
void force_rotation();
protected:
void sink_it_(const details::log_msg &msg) override;

@ -101,3 +101,22 @@ TEST_CASE("rotating_file_logger3", "[rotating_logger]") {
REQUIRE_THROWS_AS(spdlog::rotating_logger_mt("logger", basename, max_size, 0),
spdlog::spdlog_ex);
}
// test forced rotation of logs
TEST_CASE("rotating_file_logger4", "[rotating_logger]") {
prepare_logdir();
size_t max_size = 1024 * 10;
auto sink = std::make_shared<spdlog::sinks::rotating_file_sink_st>(ROTATING_LOG, max_size, 2);
auto logger = std::make_shared<spdlog::logger>("rotating_sink_logger", sink);
logger->info("Test message - pre-rotation");
logger->flush();
sink->force_rotation();
logger->info("Test message - post-rotation");
logger->flush();
REQUIRE(get_filesize(ROTATING_LOG) > 0);
REQUIRE(get_filesize(ROTATING_LOG ".1") > 0);
}

Loading…
Cancel
Save