12 #include <string_view> 14 #include "quill/core/Attributes.h" 15 #include "quill/core/QuillError.h" 24 explicit BackendMdcState(std::string
const& pattern) : _format_parts(pattern) {}
26 void set(std::string_view key, std::string_view
value)
28 _fields[std::string{key}] = std::string{
value};
31 void erase(std::string_view key) { _fields.erase(std::string{key}); }
36 _formatted_mdc.clear();
39 QUILL_NODISCARD std::string_view formatted_mdc()
const noexcept {
return _formatted_mdc; }
41 QUILL_NODISCARD
bool empty()
const noexcept {
return _fields.empty(); }
43 void rebuild_formatted_mdc()
45 _formatted_mdc.clear();
52 _formatted_mdc.append(_format_parts.prefix);
55 for (
auto const& [key,
value] : _fields)
57 _formatted_mdc.append(key);
58 _formatted_mdc.append(_format_parts.kv_sep);
59 _formatted_mdc.append(
value);
61 if (++i != _fields.size())
63 _formatted_mdc.append(_format_parts.field_sep);
67 _formatted_mdc.append(_format_parts.suffix);
75 std::string field_sep;
78 explicit FormatParts(std::string
const& pattern)
80 if (!_set_from_pattern(pattern))
83 "Invalid BackendOptions::mdc_format_pattern. Expected exactly two \"{}\" placeholders " 84 "and at least one trailing character after the second placeholder."});
89 bool _set_from_pattern(std::string_view pattern)
91 static constexpr std::string_view placeholder{
"{}"};
93 size_t const first = pattern.find(placeholder);
94 if (first == std::string_view::npos)
99 size_t const second = pattern.find(placeholder, first + placeholder.size());
100 if (second == std::string_view::npos)
105 size_t const third = pattern.find(placeholder, second + placeholder.size());
106 if (third != std::string_view::npos)
111 size_t const after_second = second + placeholder.size();
112 if (after_second >= pattern.size())
117 prefix.assign(pattern.data(), first);
118 kv_sep.assign(pattern.data() + first + placeholder.size(), second - first - placeholder.size());
119 field_sep.assign(pattern.data() + after_second, pattern.size() - after_second - 1u);
120 suffix.assign(pattern.data() + pattern.size() - 1u, 1u);
125 FormatParts _format_parts;
126 std::map<std::string, std::string> _fields;
127 std::string _formatted_mdc;
Definition: BackendMdcState.h:21
Setups a signal handler to handle fatal signals.
Definition: BackendManager.h:28
custom exception
Definition: QuillError.h:47