mirror of
https://github.com/gabime/spdlog.git
synced 2024-12-26 10:31:34 +08:00
Merge pull request #2246 from doug1234/DontGetTheDate
Now only getting time if pattern_formatter needs it
This commit is contained in:
commit
caa0e54396
@ -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_;
|
||||||
|
Loading…
Reference in New Issue
Block a user