From ec8f97453fd6de74b5d2373c9d865b8c8a8f7dc9 Mon Sep 17 00:00:00 2001 From: Bailey Chittle Date: Wed, 11 Jan 2023 11:44:29 -0500 Subject: [PATCH] experimenting with attribute formatting --- include/spdlog/pattern_formatter-inl.h | 68 ++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/include/spdlog/pattern_formatter-inl.h b/include/spdlog/pattern_formatter-inl.h index ba866c68..0bc02754 100644 --- a/include/spdlog/pattern_formatter-inl.h +++ b/include/spdlog/pattern_formatter-inl.h @@ -929,6 +929,58 @@ private: log_clock::time_point last_message_time_; }; +// attribute formatting: stub +class attr_formatter_start final : public flag_formatter +{ +public: + explicit attr_formatter_start(padding_info padinfo) + : flag_formatter(padinfo) + {} + void format(const details::log_msg &, const std::tm &, memory_buf_t &dest) override + { + fmt_helper::append_string_view("", dest); + } +}; +class attr_formatter_stop final : public flag_formatter +{ +public: + explicit attr_formatter_stop(padding_info padinfo) + : flag_formatter(padinfo) + {} + void format(const details::log_msg &, const std::tm &, memory_buf_t &dest) override + { + fmt_helper::append_string_view("", dest); + } +}; + +class attr_formatter_key final : public flag_formatter +{ +public: + explicit attr_formatter_key(padding_info padinfo) + : flag_formatter(padinfo) + {} + void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override + { + for (const details::attr& a : msg.attributes) { + fmt_helper::append_string_view(a.key, dest); + } + } +}; + +class attr_formatter_value final : public flag_formatter +{ +public: + explicit attr_formatter_value(padding_info padinfo) + : flag_formatter(padinfo) + {} + void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override + { + for (const details::attr& a : msg.attributes) { + fmt_helper::append_string_view(a.value, dest); + } + } +}; + // Full info formatter // pattern: [%Y-%m-%d %H:%M:%S.%e] [%n] [%l] [%s:%#] %v class full_formatter final : public flag_formatter @@ -1320,6 +1372,22 @@ SPDLOG_INLINE void pattern_formatter::handle_flag_(char flag, details::padding_i formatters_.push_back(details::make_unique>(padding)); break; + case ('['): // start attribute formatting + formatters_.push_back(details::make_unique(padding)); + break; + + case ('K'): // attribute key + formatters_.push_back(details::make_unique(padding)); + break; + + case ('V'): // attribute value + formatters_.push_back(details::make_unique(padding)); + break; + + case (']'): // stop attribute formatting + formatters_.push_back(details::make_unique(padding)); + break; + default: // Unknown flag appears as is auto unknown_flag = details::make_unique();