mirror of
https://github.com/gabime/spdlog.git
synced 2025-05-02 04:53:55 +00:00
Adding on demand truncation for basic file sinks (#3280)
* Adding support to truncate on demand for basic file sink * Remove unnecessary file close * Adding lock in basic_file_sink truncate()
This commit is contained in:
parent
1e6250e183
commit
65e388e82b
@ -26,6 +26,12 @@ SPDLOG_INLINE const filename_t &basic_file_sink<Mutex>::filename() const {
|
|||||||
return file_helper_.filename();
|
return file_helper_.filename();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Mutex>
|
||||||
|
SPDLOG_INLINE void basic_file_sink<Mutex>::truncate() {
|
||||||
|
std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
|
||||||
|
file_helper_.reopen(true);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename Mutex>
|
template <typename Mutex>
|
||||||
SPDLOG_INLINE void basic_file_sink<Mutex>::sink_it_(const details::log_msg &msg) {
|
SPDLOG_INLINE void basic_file_sink<Mutex>::sink_it_(const details::log_msg &msg) {
|
||||||
memory_buf_t formatted;
|
memory_buf_t formatted;
|
||||||
|
@ -23,6 +23,7 @@ public:
|
|||||||
bool truncate = false,
|
bool truncate = false,
|
||||||
const file_event_handlers &event_handlers = {});
|
const file_event_handlers &event_handlers = {});
|
||||||
const filename_t &filename() const;
|
const filename_t &filename() const;
|
||||||
|
void truncate();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void sink_it_(const details::log_msg &msg) override;
|
void sink_it_(const details::log_msg &msg) override;
|
||||||
|
@ -45,6 +45,26 @@ TEST_CASE("flush_on", "[flush_on]") {
|
|||||||
default_eol, default_eol, default_eol));
|
default_eol, default_eol, default_eol));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("simple_file_logger", "[truncate]") {
|
||||||
|
prepare_logdir();
|
||||||
|
const spdlog::filename_t filename = SPDLOG_FILENAME_T(SIMPLE_LOG);
|
||||||
|
const bool truncate = true;
|
||||||
|
const auto sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>(filename, truncate);
|
||||||
|
const auto logger = std::make_shared<spdlog::logger>("simple_file_logger", sink);
|
||||||
|
|
||||||
|
logger->info("Test message {}", 3.14);
|
||||||
|
logger->info("Test message {}", 2.71);
|
||||||
|
logger->flush();
|
||||||
|
REQUIRE(count_lines(SIMPLE_LOG) == 2);
|
||||||
|
|
||||||
|
sink->truncate();
|
||||||
|
REQUIRE(count_lines(SIMPLE_LOG) == 0);
|
||||||
|
|
||||||
|
logger->info("Test message {}", 6.28);
|
||||||
|
logger->flush();
|
||||||
|
REQUIRE(count_lines(SIMPLE_LOG) == 1);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_CASE("rotating_file_logger1", "[rotating_logger]") {
|
TEST_CASE("rotating_file_logger1", "[rotating_logger]") {
|
||||||
prepare_logdir();
|
prepare_logdir();
|
||||||
size_t max_size = 1024 * 10;
|
size_t max_size = 1024 * 10;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user