87 lines
3.1 KiB
Diff
87 lines
3.1 KiB
Diff
From af1785b897c9d1098d4aa7213fad232be63c19b4 Mon Sep 17 00:00:00 2001
|
|
From: Bernd Ritter <commel@users.noreply.github.com>
|
|
Date: Fri, 19 May 2023 18:51:02 +0200
|
|
Subject: [PATCH] Removes special format handling for fmt. (#2736)
|
|
|
|
* Removes special format handling for fmt. Regains test compatibility with fmt
|
|
1.10.0.
|
|
|
|
fixes #2735
|
|
|
|
* reverted std::vector back to filename_t and used pointer to array start likewise as fmt's implementation uses
|
|
|
|
* calc_filename buffer increase softened, exception is throw if buffer exceeds 4k, filename parameter renamed to match intend.
|
|
|
|
* calc_filetime based on std::put_time for simpler implementation
|
|
---
|
|
include/spdlog/sinks/daily_file_sink.h | 46 +++++---------------------
|
|
1 file changed, 9 insertions(+), 37 deletions(-)
|
|
|
|
diff --git a/include/spdlog/sinks/daily_file_sink.h b/include/spdlog/sinks/daily_file_sink.h
|
|
index f6f1bb1d7..90af96768 100644
|
|
--- a/include/spdlog/sinks/daily_file_sink.h
|
|
+++ b/include/spdlog/sinks/daily_file_sink.h
|
|
@@ -13,6 +13,9 @@
|
|
#include <spdlog/details/circular_q.h>
|
|
#include <spdlog/details/synchronous_factory.h>
|
|
|
|
+#include <iostream>
|
|
+#include <sstream>
|
|
+#include <iomanip>
|
|
#include <chrono>
|
|
#include <cstdio>
|
|
#include <ctime>
|
|
@@ -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:
|