@ -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 & file name , 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 :