|
|
@ -114,14 +114,16 @@ class B_formatter : public flag_formatter
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// write 2 ints separated by sep with padding of 2
|
|
|
|
// write 2 ints separated by sep with padding of 2
|
|
|
|
static fmt::MemoryWriter &pad_n_join(fmt::MemoryWriter &w, int v1, int v2, char sep)
|
|
|
|
template<class Allocator = std::allocator<char>>
|
|
|
|
|
|
|
|
static fmt::BasicMemoryWriter<char, Allocator> &pad_n_join(fmt::BasicMemoryWriter<char, Allocator> &w, int v1, int v2, char sep)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
w << fmt::pad(v1, 2, '0') << sep << fmt::pad(v2, 2, '0');
|
|
|
|
w << fmt::pad(v1, 2, '0') << sep << fmt::pad(v2, 2, '0');
|
|
|
|
return w;
|
|
|
|
return w;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// write 3 ints separated by sep with padding of 2
|
|
|
|
// write 3 ints separated by sep with padding of 2
|
|
|
|
static fmt::MemoryWriter &pad_n_join(fmt::MemoryWriter &w, int v1, int v2, int v3, char sep)
|
|
|
|
template<class Allocator = std::allocator<char>>
|
|
|
|
|
|
|
|
static fmt::BasicMemoryWriter<char, Allocator> &pad_n_join(fmt::BasicMemoryWriter<char, Allocator> &w, int v1, int v2, int v3, char sep)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
w << fmt::pad(v1, 2, '0') << sep << fmt::pad(v2, 2, '0') << sep << fmt::pad(v3, 2, '0');
|
|
|
|
w << fmt::pad(v1, 2, '0') << sep << fmt::pad(v2, 2, '0') << sep << fmt::pad(v3, 2, '0');
|
|
|
|
return w;
|
|
|
|
return w;
|
|
|
@ -418,7 +420,7 @@ public:
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
private:
|
|
|
|
std::string _str;
|
|
|
|
string _str;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// Full info formatter
|
|
|
|
// Full info formatter
|
|
|
@ -472,17 +474,17 @@ class full_formatter SPDLOG_FINAL : public flag_formatter
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// pattern_formatter inline impl
|
|
|
|
// pattern_formatter inline impl
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
inline spdlog::pattern_formatter::pattern_formatter(const std::string &pattern, pattern_time_type pattern_time, std::string eol)
|
|
|
|
inline spdlog::pattern_formatter::pattern_formatter(const string &pattern, pattern_time_type pattern_time, string eol)
|
|
|
|
: _eol(std::move(eol))
|
|
|
|
: _eol(std::move(eol))
|
|
|
|
, _pattern_time(pattern_time)
|
|
|
|
, _pattern_time(pattern_time)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
compile_pattern(pattern);
|
|
|
|
compile_pattern(pattern);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline void spdlog::pattern_formatter::compile_pattern(const std::string &pattern)
|
|
|
|
inline void spdlog::pattern_formatter::compile_pattern(const string &pattern)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto end = pattern.end();
|
|
|
|
auto end = pattern.end();
|
|
|
|
std::unique_ptr<details::aggregate_formatter> user_chars;
|
|
|
|
unique_ptr<details::aggregate_formatter> user_chars;
|
|
|
|
for (auto it = pattern.begin(); it != end; ++it)
|
|
|
|
for (auto it = pattern.begin(); it != end; ++it)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (*it == '%')
|
|
|
|
if (*it == '%')
|
|
|
@ -504,7 +506,7 @@ inline void spdlog::pattern_formatter::compile_pattern(const std::string &patter
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (!user_chars)
|
|
|
|
if (!user_chars)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
user_chars = std::unique_ptr<details::aggregate_formatter>(new details::aggregate_formatter());
|
|
|
|
user_chars = unique_ptr<details::aggregate_formatter>(make_unique<details::aggregate_formatter>());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
user_chars->add_ch(*it);
|
|
|
|
user_chars->add_ch(*it);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -520,134 +522,134 @@ inline void spdlog::pattern_formatter::handle_flag(char flag)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// logger name
|
|
|
|
// logger name
|
|
|
|
case 'n':
|
|
|
|
case 'n':
|
|
|
|
_formatters.emplace_back(new details::name_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::name_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case 'l':
|
|
|
|
case 'l':
|
|
|
|
_formatters.emplace_back(new details::level_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::level_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case 'L':
|
|
|
|
case 'L':
|
|
|
|
_formatters.emplace_back(new details::short_level_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::short_level_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('t'):
|
|
|
|
case ('t'):
|
|
|
|
_formatters.emplace_back(new details::t_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::t_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('v'):
|
|
|
|
case ('v'):
|
|
|
|
_formatters.emplace_back(new details::v_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::v_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('a'):
|
|
|
|
case ('a'):
|
|
|
|
_formatters.emplace_back(new details::a_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::a_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('A'):
|
|
|
|
case ('A'):
|
|
|
|
_formatters.emplace_back(new details::A_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::A_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('b'):
|
|
|
|
case ('b'):
|
|
|
|
case ('h'):
|
|
|
|
case ('h'):
|
|
|
|
_formatters.emplace_back(new details::b_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::b_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('B'):
|
|
|
|
case ('B'):
|
|
|
|
_formatters.emplace_back(new details::B_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::B_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case ('c'):
|
|
|
|
case ('c'):
|
|
|
|
_formatters.emplace_back(new details::c_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::c_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('C'):
|
|
|
|
case ('C'):
|
|
|
|
_formatters.emplace_back(new details::C_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::C_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('Y'):
|
|
|
|
case ('Y'):
|
|
|
|
_formatters.emplace_back(new details::Y_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::Y_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('D'):
|
|
|
|
case ('D'):
|
|
|
|
case ('x'):
|
|
|
|
case ('x'):
|
|
|
|
|
|
|
|
|
|
|
|
_formatters.emplace_back(new details::D_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::D_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('m'):
|
|
|
|
case ('m'):
|
|
|
|
_formatters.emplace_back(new details::m_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::m_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('d'):
|
|
|
|
case ('d'):
|
|
|
|
_formatters.emplace_back(new details::d_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::d_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('H'):
|
|
|
|
case ('H'):
|
|
|
|
_formatters.emplace_back(new details::H_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::H_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('I'):
|
|
|
|
case ('I'):
|
|
|
|
_formatters.emplace_back(new details::I_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::I_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('M'):
|
|
|
|
case ('M'):
|
|
|
|
_formatters.emplace_back(new details::M_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::M_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('S'):
|
|
|
|
case ('S'):
|
|
|
|
_formatters.emplace_back(new details::S_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::S_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('e'):
|
|
|
|
case ('e'):
|
|
|
|
_formatters.emplace_back(new details::e_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::e_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('f'):
|
|
|
|
case ('f'):
|
|
|
|
_formatters.emplace_back(new details::f_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::f_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case ('F'):
|
|
|
|
case ('F'):
|
|
|
|
_formatters.emplace_back(new details::F_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::F_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('E'):
|
|
|
|
case ('E'):
|
|
|
|
_formatters.emplace_back(new details::E_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::E_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('p'):
|
|
|
|
case ('p'):
|
|
|
|
_formatters.emplace_back(new details::p_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::p_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('r'):
|
|
|
|
case ('r'):
|
|
|
|
_formatters.emplace_back(new details::r_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::r_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('R'):
|
|
|
|
case ('R'):
|
|
|
|
_formatters.emplace_back(new details::R_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::R_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('T'):
|
|
|
|
case ('T'):
|
|
|
|
case ('X'):
|
|
|
|
case ('X'):
|
|
|
|
_formatters.emplace_back(new details::T_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::T_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('z'):
|
|
|
|
case ('z'):
|
|
|
|
_formatters.emplace_back(new details::z_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::z_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('+'):
|
|
|
|
case ('+'):
|
|
|
|
_formatters.emplace_back(new details::full_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::full_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('P'):
|
|
|
|
case ('P'):
|
|
|
|
_formatters.emplace_back(new details::pid_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::pid_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case ('i'):
|
|
|
|
case ('i'):
|
|
|
|
_formatters.emplace_back(new details::i_formatter());
|
|
|
|
_formatters.emplace_back(make_unique<details::i_formatter>());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
default: // Unknown flag appears as is
|
|
|
|
default: // Unknown flag appears as is
|
|
|
|
_formatters.emplace_back(new details::ch_formatter('%'));
|
|
|
|
_formatters.emplace_back(make_unique<details::ch_formatter>('%'));
|
|
|
|
_formatters.emplace_back(new details::ch_formatter(flag));
|
|
|
|
_formatters.emplace_back(make_unique<details::ch_formatter>(flag));
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|