diff --git a/include/spdlog/sinks/daily_file_sink.h b/include/spdlog/sinks/daily_file_sink.h index f6f1bb1d..90af9676 100644 --- a/include/spdlog/sinks/daily_file_sink.h +++ b/include/spdlog/sinks/daily_file_sink.h @@ -13,6 +13,9 @@ #include #include +#include +#include +#include #include #include #include @@ -46,46 +49,15 @@ struct daily_filename_calculator */ struct daily_filename_format_calculator { - static filename_t calc_filename(const filename_t &filename, const tm &now_tm) + static filename_t calc_filename(const filename_t &file_path, const tm &now_tm) { -#ifdef SPDLOG_USE_STD_FORMAT - // adapted from fmtlib: https://github.com/fmtlib/fmt/blob/8.0.1/include/fmt/chrono.h#L522-L546 - - filename_t tm_format; - tm_format.append(filename); - // By appending an extra space we can distinguish an empty result that - // indicates insufficient buffer size from a guaranteed non-empty result - // https://github.com/fmtlib/fmt/issues/2238 - tm_format.push_back(' '); - - const size_t MIN_SIZE = 10; - filename_t buf; - buf.resize(MIN_SIZE); - for (;;) - { - size_t count = strftime(buf.data(), buf.size(), tm_format.c_str(), &now_tm); - if (count != 0) - { - // Remove the extra space. - buf.resize(count - 1); - break; - } - buf.resize(buf.size() * 2); - } - - return buf; +#if defined(_WIN32) && defined(SPDLOG_WCHAR_FILENAMES) + std::wstringstream stream; #else - // generate fmt datetime format string, e.g. {:%Y-%m-%d}. - filename_t fmt_filename = fmt::format(SPDLOG_FMT_STRING(SPDLOG_FILENAME_T("{{:{}}}")), filename); - - // MSVC doesn't allow fmt::runtime(..) with wchar, with fmtlib versions < 9.1.x -# if defined(_MSC_VER) && defined(SPDLOG_WCHAR_FILENAMES) && FMT_VERSION < 90101 - return fmt::format(fmt_filename, now_tm); -# else - return fmt::format(SPDLOG_FMT_RUNTIME(fmt_filename), now_tm); -# endif - + std::stringstream stream; #endif + stream << std::put_time(&now_tm, file_path.c_str()); + return stream.str(); } private: