From 877a6184008e1af7b17f936c2a1824d4ad6bca14 Mon Sep 17 00:00:00 2001 From: puasonych Date: Wed, 30 May 2018 12:48:56 +0500 Subject: [PATCH] Update step logger Fixed bugs with multithreading and added protection against data lost with insufficiently accurate setting of the maximum value of the file size --- include/spdlog/contrib/sinks/step_file_sink.h | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/include/spdlog/contrib/sinks/step_file_sink.h b/include/spdlog/contrib/sinks/step_file_sink.h index 9010eda4..f4a098d2 100644 --- a/include/spdlog/contrib/sinks/step_file_sink.h +++ b/include/spdlog/contrib/sinks/step_file_sink.h @@ -99,8 +99,11 @@ public: _file_helper.open(_current_filename); _current_size = _file_helper.size(); // expensive. called only once - _current_size += _file_header.formatted.size(); - if (_current_size) _file_helper.write(_file_header); + if (!_current_size) + { + _current_size += _file_header.formatted.size(); + if (_current_size) _file_helper.write(_file_header); + } } ~step_file_sink() @@ -123,14 +126,17 @@ protected: { filename_t new_filename; std::tie(new_filename, std::ignore) = FileNameCalc::calc_filename(_base_filename, _tmp_ext); - if (new_filename != _current_filename) + + bool change_occured = !details::file_helper::file_exists(new_filename); + if (change_occured) close_current_file(); + + _current_filename = std::move(new_filename); + + _file_helper.open(_current_filename); + _tp = _next_tp(); + + if (change_occured) { - close_current_file(); - - // std::tie(_current_filename, std::ignore) = FileNameCalc::calc_filename(_base_filename, _tmp_ext); - _file_helper.open(_current_filename); - _tp = _next_tp(); - _current_size = _file_header.formatted.size(); if (_current_size) _file_helper.write(_file_header); }