Merge pull request #2246 from doug1234/DontGetTheDate
Now only getting time if pattern_formatter needs it
This commit is contained in:
		@@ -1021,6 +1021,7 @@ SPDLOG_INLINE pattern_formatter::pattern_formatter(
 | 
				
			|||||||
    , pattern_time_type_(time_type)
 | 
					    , pattern_time_type_(time_type)
 | 
				
			||||||
    , last_log_secs_(0)
 | 
					    , last_log_secs_(0)
 | 
				
			||||||
    , custom_handlers_(std::move(custom_user_flags))
 | 
					    , custom_handlers_(std::move(custom_user_flags))
 | 
				
			||||||
 | 
					    , need_localtime_(false)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    std::memset(&cached_tm_, 0, sizeof(cached_tm_));
 | 
					    std::memset(&cached_tm_, 0, sizeof(cached_tm_));
 | 
				
			||||||
    compile_pattern_(pattern_);
 | 
					    compile_pattern_(pattern_);
 | 
				
			||||||
@@ -1032,6 +1033,7 @@ SPDLOG_INLINE pattern_formatter::pattern_formatter(pattern_time_type time_type,
 | 
				
			|||||||
    , eol_(std::move(eol))
 | 
					    , eol_(std::move(eol))
 | 
				
			||||||
    , pattern_time_type_(time_type)
 | 
					    , pattern_time_type_(time_type)
 | 
				
			||||||
    , last_log_secs_(0)
 | 
					    , last_log_secs_(0)
 | 
				
			||||||
 | 
					    , need_localtime_(true)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    std::memset(&cached_tm_, 0, sizeof(cached_tm_));
 | 
					    std::memset(&cached_tm_, 0, sizeof(cached_tm_));
 | 
				
			||||||
    formatters_.push_back(details::make_unique<details::full_formatter>(details::padding_info{}));
 | 
					    formatters_.push_back(details::make_unique<details::full_formatter>(details::padding_info{}));
 | 
				
			||||||
@@ -1049,11 +1051,14 @@ SPDLOG_INLINE std::unique_ptr<formatter> pattern_formatter::clone() const
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
SPDLOG_INLINE void pattern_formatter::format(const details::log_msg &msg, memory_buf_t &dest)
 | 
					SPDLOG_INLINE void pattern_formatter::format(const details::log_msg &msg, memory_buf_t &dest)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    auto secs = std::chrono::duration_cast<std::chrono::seconds>(msg.time.time_since_epoch());
 | 
					    if (need_localtime_) 
 | 
				
			||||||
    if (secs != last_log_secs_)
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        cached_tm_ = get_time_(msg);
 | 
					        const auto secs = std::chrono::duration_cast<std::chrono::seconds>(msg.time.time_since_epoch());
 | 
				
			||||||
        last_log_secs_ = secs;
 | 
					        if (secs != last_log_secs_)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            cached_tm_ = get_time_(msg);
 | 
				
			||||||
 | 
					            last_log_secs_ = secs;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (auto &f : formatters_)
 | 
					    for (auto &f : formatters_)
 | 
				
			||||||
@@ -1067,6 +1072,7 @@ SPDLOG_INLINE void pattern_formatter::format(const details::log_msg &msg, memory
 | 
				
			|||||||
SPDLOG_INLINE void pattern_formatter::set_pattern(std::string pattern)
 | 
					SPDLOG_INLINE void pattern_formatter::set_pattern(std::string pattern)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    pattern_ = std::move(pattern);
 | 
					    pattern_ = std::move(pattern);
 | 
				
			||||||
 | 
					    need_localtime_ = false;
 | 
				
			||||||
    compile_pattern_(pattern_);
 | 
					    compile_pattern_(pattern_);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1097,6 +1103,7 @@ SPDLOG_INLINE void pattern_formatter::handle_flag_(char flag, details::padding_i
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
    case ('+'): // default formatter
 | 
					    case ('+'): // default formatter
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::full_formatter>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::full_formatter>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case 'n': // logger name
 | 
					    case 'n': // logger name
 | 
				
			||||||
@@ -1121,60 +1128,74 @@ SPDLOG_INLINE void pattern_formatter::handle_flag_(char flag, details::padding_i
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    case ('a'): // weekday
 | 
					    case ('a'): // weekday
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::a_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::a_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('A'): // short weekday
 | 
					    case ('A'): // short weekday
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::A_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::A_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('b'):
 | 
					    case ('b'):
 | 
				
			||||||
    case ('h'): // month
 | 
					    case ('h'): // month
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::b_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::b_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('B'): // short month
 | 
					    case ('B'): // short month
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::B_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::B_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('c'): // datetime
 | 
					    case ('c'): // datetime
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::c_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::c_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('C'): // year 2 digits
 | 
					    case ('C'): // year 2 digits
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::C_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::C_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('Y'): // year 4 digits
 | 
					    case ('Y'): // year 4 digits
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::Y_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::Y_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('D'):
 | 
					    case ('D'):
 | 
				
			||||||
    case ('x'): // datetime MM/DD/YY
 | 
					    case ('x'): // datetime MM/DD/YY
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::D_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::D_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('m'): // month 1-12
 | 
					    case ('m'): // month 1-12
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::m_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::m_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('d'): // day of month 1-31
 | 
					    case ('d'): // day of month 1-31
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::d_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::d_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('H'): // hours 24
 | 
					    case ('H'): // hours 24
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::H_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::H_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('I'): // hours 12
 | 
					    case ('I'): // hours 12
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::I_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::I_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('M'): // minutes
 | 
					    case ('M'): // minutes
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::M_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::M_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('S'): // seconds
 | 
					    case ('S'): // seconds
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::S_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::S_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('e'): // milliseconds
 | 
					    case ('e'): // milliseconds
 | 
				
			||||||
@@ -1195,23 +1216,28 @@ SPDLOG_INLINE void pattern_formatter::handle_flag_(char flag, details::padding_i
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    case ('p'): // am/pm
 | 
					    case ('p'): // am/pm
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::p_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::p_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('r'): // 12 hour clock 02:55:02 pm
 | 
					    case ('r'): // 12 hour clock 02:55:02 pm
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::r_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::r_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('R'): // 24-hour HH:MM time
 | 
					    case ('R'): // 24-hour HH:MM time
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::R_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::R_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('T'):
 | 
					    case ('T'):
 | 
				
			||||||
    case ('X'): // ISO 8601 time format (HH:MM:SS)
 | 
					    case ('X'): // ISO 8601 time format (HH:MM:SS)
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::T_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::T_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('z'): // timezone
 | 
					    case ('z'): // timezone
 | 
				
			||||||
        formatters_.push_back(details::make_unique<details::z_formatter<Padder>>(padding));
 | 
					        formatters_.push_back(details::make_unique<details::z_formatter<Padder>>(padding));
 | 
				
			||||||
 | 
					        need_localtime_ = true;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case ('P'): // pid
 | 
					    case ('P'): // pid
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -103,6 +103,7 @@ private:
 | 
				
			|||||||
    std::string pattern_;
 | 
					    std::string pattern_;
 | 
				
			||||||
    std::string eol_;
 | 
					    std::string eol_;
 | 
				
			||||||
    pattern_time_type pattern_time_type_;
 | 
					    pattern_time_type pattern_time_type_;
 | 
				
			||||||
 | 
					    bool need_localtime_;
 | 
				
			||||||
    std::tm cached_tm_;
 | 
					    std::tm cached_tm_;
 | 
				
			||||||
    std::chrono::seconds last_log_secs_;
 | 
					    std::chrono::seconds last_log_secs_;
 | 
				
			||||||
    std::vector<std::unique_ptr<details::flag_formatter>> formatters_;
 | 
					    std::vector<std::unique_ptr<details::flag_formatter>> formatters_;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user