extract date component from daily file name

pull/1567/head
Ali Alamiri 5 years ago
parent dd93c6e5eb
commit 1a1a7e05eb

@ -26,13 +26,41 @@ namespace sinks {
*/ */
struct daily_filename_calculator struct daily_filename_calculator
{ {
// Create filename for the form basename.YYYY-MM-DD // Create filename for the form basename_YYYY-MM-DD
static filename_t calc_filename(const filename_t &filename, const tm &now_tm) static filename_t calc_filename(const filename_t &filename, const tm &now_tm)
{ {
filename_t basename, ext; filename_t basename, ext;
std::tie(basename, ext) = details::file_helper::split_by_extension(filename); std::tie(basename, ext) = details::file_helper::split_by_extension(filename);
return fmt::format( return fmt::format(
SPDLOG_FILENAME_T("{}_{:04d}-{:02d}-{:02d}{}"), basename, now_tm.tm_year + 1900, now_tm.tm_mon + 1, now_tm.tm_mday, ext); SPDLOG_FILENAME_T("{}{}{:04d}-{:02d}-{:02d}{}"), basename, filename_prefix_symbol(), now_tm.tm_year + 1900, now_tm.tm_mon + 1, now_tm.tm_mday, ext);
}
// Extract the YYYY-MM-DD suffix from the file name that was based on base_filename and calculated using calc_filename.
static filename_t extract_date_suffix(const filename_t &base_filename, const filename_t &filename)
{
const filename_t base_filename_no_ext = std::get<0>(details::file_helper::split_by_extension(base_filename));
const filename_t prefix = base_filename_no_ext + filename_prefix_symbol();
const bool starts_with_base_filename = filename.size() >= prefix.size() && std::equal(prefix.begin(), prefix.end(), filename.begin());
if(starts_with_base_filename)
{
const filename_t filename_no_ext = std::get<0>(details::file_helper::split_by_extension(filename));
const filename_t::size_type last_prefix_symbol = filename_no_ext.find_last_of(filename_prefix_symbol());
if(last_prefix_symbol < filename_no_ext.size())
{
return filename_no_ext.substr(last_prefix_symbol + 1);
}
}
return SPDLOG_FILENAME_T("");
}
static filename_t filename_prefix_symbol()
{
return SPDLOG_FILENAME_T("_");
} }
}; };

@ -99,6 +99,28 @@ TEST_CASE("daily_file_sink::daily_filename_calculator", "[daily_file_sink]]")
} }
#endif #endif
TEST_CASE("daily_file_sink::daily_filename_calculator::extract_date_suffix", "[daily_file_sink]]")
{
auto now = spdlog::details::os::localtime();
auto basename = "daily.txt";
auto filename = spdlog::sinks::daily_filename_calculator::calc_filename(basename, now);
auto date_suffix = spdlog::sinks::daily_filename_calculator::extract_date_suffix(basename, filename);
auto expected_suffix = fmt::format(SPDLOG_FILENAME_T("{:04d}-{:02d}-{:02d}"), now.tm_year + 1900, now.tm_mon + 1, now.tm_mday);
REQUIRE(date_suffix == expected_suffix);
}
TEST_CASE("daily_file_sink::daily_filename_calculator::extract_date_suffix2", "[daily_file_sink]]")
{
auto date_suffix = spdlog::sinks::daily_filename_calculator::extract_date_suffix("basename", "filename");
REQUIRE(date_suffix == "");
}
/* Test removal of old files */ /* Test removal of old files */
static spdlog::details::log_msg create_msg(std::chrono::seconds offset) static spdlog::details::log_msg create_msg(std::chrono::seconds offset)
{ {

Loading…
Cancel
Save