Repository: gabime/spdlog
File: include/spdlog/pattern_formatter-inl.h (C/C++)

Code before:
                    msg.source.filename);
            fmt_helper::append_string_view(filename, dest);
            dest.push_back(':');
            fmt_helper::append_int(msg.source.line, dest);
            dest.push_back(']');
            dest.push_back(' ');
        }
        // fmt_helper::append_string_view(msg.msg(), dest);
        fmt_helper::append_string_view(msg.payload, dest);
    }

private:
    std::chrono::seconds cache_timestamp_{0};
    memory_buf_t cached_datetime_;
};

template <typename ScopedPadder>
class mdc_formatter : public flag_formatter {
public:
    explicit mdc_formatter(padding_info padinfo)
        : flag_formatter(padinfo) {}

    void format(const details::log_msg &, const std::tm &, memory_buf_t &dest) override {
        auto mdc_map = mdc::get_context();
        if (!mdc_map.empty()) {
            auto last_element = --mdc_map.end();
            for (auto it = mdc_map.begin(); it != mdc_map.end(); ++it) {
                auto &pair = *it;
                const auto &key = pair.first;
                const auto &value = pair.second;
                size_t content_size = key.size() + value.size() + 1;  // 1 for ':'

                if (it != last_element) {
                    content_size++;  // 1 for ' '
                }

                ScopedPadder p(content_size, padinfo_, dest);
                fmt_helper::append_string_view(key, dest);
                fmt_helper::append_string_view(":", dest);
                fmt_helper::append_string_view(value, dest);
                if (it != last_element) {
                    fmt_helper::append_string_view(" ", dest);
                }
            }
        }
    }
};

}  // namespace details

SPDLOG_INLINE pattern_formatter::pattern_formatter(std::string pattern,

Review comment (suggestion):
if empty should still respect the padding rules

```c++
if (mdc_map.empty()) {
            ScopedPadder p(0, padinfo_, dest);
            return;
   }

Code after:
                    msg.source.filename);
            fmt_helper::append_string_view(filename, dest);
            dest.push_back(':');
            fmt_helper::append_int(msg.source.line, dest);
            dest.push_back(']');
            dest.push_back(' ');
        }
        // fmt_helper::append_string_view(msg.msg(), dest);
        fmt_helper::append_string_view(msg.payload, dest);
    }

private:
    std::chrono::seconds cache_timestamp_{0};
    memory_buf_t cached_datetime_;
};

// Class for formatting Mapped Diagnostic Context (MDC) in log messages.
// Example: [logger-name] [info] [mdc_key_1:mdc_value_1 mdc_key_2:mdc_value_2] some message
template <typename ScopedPadder>
class mdc_formatter : public flag_formatter {
public:
    explicit mdc_formatter(padding_info padinfo)
        : flag_formatter(padinfo) {}

    void format(const details::log_msg &, const std::tm &, memory_buf_t &dest) override {
        auto mdc_map = mdc::get_context();
        if (mdc_map.empty()) {
            ScopedPadder p(0, padinfo_, dest);
            return;
        } else {
            auto last_element = --mdc_map.end();
            for (auto it = mdc_map.begin(); it != mdc_map.end(); ++it) {
                auto &pair = *it;
                const auto &key = pair.first;
                const auto &value = pair.second;
                size_t content_size = key.size() + value.size() + 1;  // 1 for ':'

                if (it != last_element) {
                    content_size++;  // 1 for ' '
                }

                ScopedPadder p(content_size, padinfo_, dest);
                fmt_helper::append_string_view(key, dest);
                fmt_helper::append_string_view(":", dest);
                fmt_helper::append_string_view(value, dest);
                if (it != last_element) {
                    fmt_helper::append_string_view(" ", dest);
                }
            }
        }
    }