|
|
|
@ -13,8 +13,7 @@ static std::string log_to_str(const std::string &msg, const Args &...args) {
|
|
|
|
|
spdlog::logger oss_logger("pattern_tester", oss_sink);
|
|
|
|
|
oss_logger.set_level(spdlog::level::info);
|
|
|
|
|
|
|
|
|
|
oss_logger.set_formatter(
|
|
|
|
|
std::unique_ptr<spdlog::formatter>(new spdlog::pattern_formatter(args...)));
|
|
|
|
|
oss_logger.set_formatter(std::unique_ptr<spdlog::formatter>(new spdlog::pattern_formatter(args...)));
|
|
|
|
|
|
|
|
|
|
oss_logger.info(msg);
|
|
|
|
|
return oss.str();
|
|
|
|
@ -35,13 +34,11 @@ TEST_CASE("empty format2", "[pattern_formatter]") {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("level", "[pattern_formatter]") {
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%l] %v", spdlog::pattern_time_type::local, "\n") ==
|
|
|
|
|
"[info] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%l] %v", spdlog::pattern_time_type::local, "\n") == "[info] Some message\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("short level", "[pattern_formatter]") {
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%L] %v", spdlog::pattern_time_type::local, "\n") ==
|
|
|
|
|
"[I] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%L] %v", spdlog::pattern_time_type::local, "\n") == "[I] Some message\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("name", "[pattern_formatter]") {
|
|
|
|
@ -52,23 +49,19 @@ TEST_CASE("name", "[pattern_formatter]") {
|
|
|
|
|
TEST_CASE("date MM/DD/YY ", "[pattern_formatter]") {
|
|
|
|
|
auto now_tm = spdlog::details::os::localtime();
|
|
|
|
|
std::stringstream oss;
|
|
|
|
|
oss << std::setfill('0') << std::setw(2) << now_tm.tm_mon + 1 << "/" << std::setw(2)
|
|
|
|
|
<< now_tm.tm_mday << "/" << std::setw(2) << (now_tm.tm_year + 1900) % 1000
|
|
|
|
|
<< " Some message\n";
|
|
|
|
|
REQUIRE(log_to_str("Some message", "%D %v", spdlog::pattern_time_type::local, "\n") ==
|
|
|
|
|
oss.str());
|
|
|
|
|
oss << std::setfill('0') << std::setw(2) << now_tm.tm_mon + 1 << "/" << std::setw(2) << now_tm.tm_mday << "/"
|
|
|
|
|
<< std::setw(2) << (now_tm.tm_year + 1900) % 1000 << " Some message\n";
|
|
|
|
|
REQUIRE(log_to_str("Some message", "%D %v", spdlog::pattern_time_type::local, "\n") == oss.str());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("color range test1", "[pattern_formatter]") {
|
|
|
|
|
auto formatter = std::make_shared<spdlog::pattern_formatter>(
|
|
|
|
|
"%^%v%$", spdlog::pattern_time_type::local, "\n");
|
|
|
|
|
auto formatter = std::make_shared<spdlog::pattern_formatter>("%^%v%$", spdlog::pattern_time_type::local, "\n");
|
|
|
|
|
|
|
|
|
|
memory_buf_t buf;
|
|
|
|
|
spdlog::fmt_lib::format_to(std::back_inserter(buf), "Hello");
|
|
|
|
|
memory_buf_t formatted;
|
|
|
|
|
std::string logger_name = "test";
|
|
|
|
|
spdlog::details::log_msg msg(logger_name, spdlog::level::info,
|
|
|
|
|
spdlog::string_view_t(buf.data(), buf.size()));
|
|
|
|
|
spdlog::details::log_msg msg(logger_name, spdlog::level::info, spdlog::string_view_t(buf.data(), buf.size()));
|
|
|
|
|
formatter->format(msg, formatted);
|
|
|
|
|
REQUIRE(msg.color_range_start == 0);
|
|
|
|
|
REQUIRE(msg.color_range_end == 5);
|
|
|
|
@ -76,8 +69,7 @@ TEST_CASE("color range test1", "[pattern_formatter]") {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("color range test2", "[pattern_formatter]") {
|
|
|
|
|
auto formatter =
|
|
|
|
|
std::make_shared<spdlog::pattern_formatter>("%^%$", spdlog::pattern_time_type::local, "\n");
|
|
|
|
|
auto formatter = std::make_shared<spdlog::pattern_formatter>("%^%$", spdlog::pattern_time_type::local, "\n");
|
|
|
|
|
std::string logger_name = "test";
|
|
|
|
|
spdlog::details::log_msg msg(logger_name, spdlog::level::info, "");
|
|
|
|
|
memory_buf_t formatted;
|
|
|
|
@ -98,8 +90,7 @@ TEST_CASE("color range test3", "[pattern_formatter]") {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("color range test4", "[pattern_formatter]") {
|
|
|
|
|
auto formatter = std::make_shared<spdlog::pattern_formatter>(
|
|
|
|
|
"XX%^YYY%$", spdlog::pattern_time_type::local, "\n");
|
|
|
|
|
auto formatter = std::make_shared<spdlog::pattern_formatter>("XX%^YYY%$", spdlog::pattern_time_type::local, "\n");
|
|
|
|
|
std::string logger_name = "test";
|
|
|
|
|
spdlog::details::log_msg msg(logger_name, spdlog::level::info, "ignored");
|
|
|
|
|
|
|
|
|
@ -107,8 +98,7 @@ TEST_CASE("color range test4", "[pattern_formatter]") {
|
|
|
|
|
formatter->format(msg, formatted);
|
|
|
|
|
REQUIRE(msg.color_range_start == 2);
|
|
|
|
|
REQUIRE(msg.color_range_end == 5);
|
|
|
|
|
REQUIRE(log_to_str("ignored", "XX%^YYY%$", spdlog::pattern_time_type::local, "\n") ==
|
|
|
|
|
"XXYYY\n");
|
|
|
|
|
REQUIRE(log_to_str("ignored", "XX%^YYY%$", spdlog::pattern_time_type::local, "\n") == "XXYYY\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("color range test5", "[pattern_formatter]") {
|
|
|
|
@ -157,45 +147,36 @@ TEST_CASE("level_center_padded", "[pattern_formatter]") {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("short level_left_padded", "[pattern_formatter]") {
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%3L] %v", spdlog::pattern_time_type::local, "\n") ==
|
|
|
|
|
"[ I] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%3!L] %v", spdlog::pattern_time_type::local, "\n") ==
|
|
|
|
|
"[ I] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%3L] %v", spdlog::pattern_time_type::local, "\n") == "[ I] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%3!L] %v", spdlog::pattern_time_type::local, "\n") == "[ I] Some message\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("short level_right_padded", "[pattern_formatter]") {
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%-3L] %v", spdlog::pattern_time_type::local, "\n") ==
|
|
|
|
|
"[I ] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%-3!L] %v", spdlog::pattern_time_type::local, "\n") ==
|
|
|
|
|
"[I ] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%-3L] %v", spdlog::pattern_time_type::local, "\n") == "[I ] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%-3!L] %v", spdlog::pattern_time_type::local, "\n") == "[I ] Some message\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("short level_center_padded", "[pattern_formatter]") {
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%=3L] %v", spdlog::pattern_time_type::local, "\n") ==
|
|
|
|
|
"[ I ] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%=3!L] %v", spdlog::pattern_time_type::local, "\n") ==
|
|
|
|
|
"[ I ] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%=3L] %v", spdlog::pattern_time_type::local, "\n") == "[ I ] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%=3!L] %v", spdlog::pattern_time_type::local, "\n") == "[ I ] Some message\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("left_padded_short", "[pattern_formatter]") {
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%3n] %v", spdlog::pattern_time_type::local, "\n") ==
|
|
|
|
|
"[pattern_tester] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%3!n] %v", spdlog::pattern_time_type::local, "\n") ==
|
|
|
|
|
"[pat] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%3!n] %v", spdlog::pattern_time_type::local, "\n") == "[pat] Some message\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("right_padded_short", "[pattern_formatter]") {
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%-3n] %v", spdlog::pattern_time_type::local, "\n") ==
|
|
|
|
|
"[pattern_tester] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%-3!n] %v", spdlog::pattern_time_type::local, "\n") ==
|
|
|
|
|
"[pat] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%-3!n] %v", spdlog::pattern_time_type::local, "\n") == "[pat] Some message\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("center_padded_short", "[pattern_formatter]") {
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%=3n] %v", spdlog::pattern_time_type::local, "\n") ==
|
|
|
|
|
"[pattern_tester] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%=3!n] %v", spdlog::pattern_time_type::local, "\n") ==
|
|
|
|
|
"[pat] Some message\n");
|
|
|
|
|
REQUIRE(log_to_str("Some message", "[%=3!n] %v", spdlog::pattern_time_type::local, "\n") == "[pat] Some message\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("left_padded_huge", "[pattern_formatter]") {
|
|
|
|
@ -239,13 +220,13 @@ TEST_CASE("padding_truncate_funcname", "[pattern_formatter]") {
|
|
|
|
|
auto formatter = std::unique_ptr<spdlog::formatter>(new spdlog::pattern_formatter(pattern));
|
|
|
|
|
test_sink.set_formatter(std::move(formatter));
|
|
|
|
|
|
|
|
|
|
spdlog::details::log_msg msg1{spdlog::source_loc{"ignored", 1, "func"}, "test_logger",
|
|
|
|
|
spdlog::level::info, "message"};
|
|
|
|
|
spdlog::details::log_msg msg1{spdlog::source_loc{"ignored", 1, "func"}, "test_logger", spdlog::level::info,
|
|
|
|
|
"message"};
|
|
|
|
|
test_sink.log(msg1);
|
|
|
|
|
REQUIRE(test_sink.lines()[0] == "message [ func]");
|
|
|
|
|
|
|
|
|
|
spdlog::details::log_msg msg2{spdlog::source_loc{"ignored", 1, "function"}, "test_logger",
|
|
|
|
|
spdlog::level::info, "message"};
|
|
|
|
|
spdlog::details::log_msg msg2{spdlog::source_loc{"ignored", 1, "function"}, "test_logger", spdlog::level::info,
|
|
|
|
|
"message"};
|
|
|
|
|
test_sink.log(msg2);
|
|
|
|
|
REQUIRE(test_sink.lines()[1] == "message [funct]");
|
|
|
|
|
}
|
|
|
|
@ -257,13 +238,13 @@ TEST_CASE("padding_funcname", "[pattern_formatter]") {
|
|
|
|
|
auto formatter = std::unique_ptr<spdlog::formatter>(new spdlog::pattern_formatter(pattern));
|
|
|
|
|
test_sink.set_formatter(std::move(formatter));
|
|
|
|
|
|
|
|
|
|
spdlog::details::log_msg msg1{spdlog::source_loc{"ignored", 1, "func"}, "test_logger",
|
|
|
|
|
spdlog::level::info, "message"};
|
|
|
|
|
spdlog::details::log_msg msg1{spdlog::source_loc{"ignored", 1, "func"}, "test_logger", spdlog::level::info,
|
|
|
|
|
"message"};
|
|
|
|
|
test_sink.log(msg1);
|
|
|
|
|
REQUIRE(test_sink.lines()[0] == "message [ func]");
|
|
|
|
|
|
|
|
|
|
spdlog::details::log_msg msg2{spdlog::source_loc{"ignored", 1, "func567890123"}, "test_logger",
|
|
|
|
|
spdlog::level::info, "message"};
|
|
|
|
|
spdlog::details::log_msg msg2{spdlog::source_loc{"ignored", 1, "func567890123"}, "test_logger", spdlog::level::info,
|
|
|
|
|
"message"};
|
|
|
|
|
test_sink.log(msg2);
|
|
|
|
|
REQUIRE(test_sink.lines()[1] == "message [func567890123]");
|
|
|
|
|
}
|
|
|
|
@ -312,8 +293,8 @@ TEST_CASE("clone-formatter", "[pattern_formatter]") {
|
|
|
|
|
|
|
|
|
|
TEST_CASE("clone-formatter-2", "[pattern_formatter]") {
|
|
|
|
|
using spdlog::pattern_time_type;
|
|
|
|
|
auto formatter_1 = std::make_shared<spdlog::pattern_formatter>(
|
|
|
|
|
"%D %X [%] [%n] %v", pattern_time_type::utc, "xxxxxx\n");
|
|
|
|
|
auto formatter_1 =
|
|
|
|
|
std::make_shared<spdlog::pattern_formatter>("%D %X [%] [%n] %v", pattern_time_type::utc, "xxxxxx\n");
|
|
|
|
|
auto formatter_2 = formatter_1->clone();
|
|
|
|
|
std::string logger_name = "test2";
|
|
|
|
|
spdlog::details::log_msg msg(logger_name, spdlog::level::info, "some message");
|
|
|
|
@ -331,14 +312,12 @@ public:
|
|
|
|
|
explicit custom_test_flag(std::string txt)
|
|
|
|
|
: some_txt{std::move(txt)} {}
|
|
|
|
|
|
|
|
|
|
void format(const spdlog::details::log_msg &,
|
|
|
|
|
const std::tm &tm,
|
|
|
|
|
spdlog::memory_buf_t &dest) override {
|
|
|
|
|
void format(const spdlog::details::log_msg &, const std::tm &tm, spdlog::memory_buf_t &dest) override {
|
|
|
|
|
if (some_txt == "throw_me") {
|
|
|
|
|
throw spdlog::spdlog_ex("custom_flag_exception_test");
|
|
|
|
|
} else if (some_txt == "time") {
|
|
|
|
|
auto formatted = spdlog::fmt_lib::format("{:d}:{:02d}{:s}", tm.tm_hour % 12, tm.tm_min,
|
|
|
|
|
tm.tm_hour / 12 ? "PM" : "AM");
|
|
|
|
|
auto formatted =
|
|
|
|
|
spdlog::fmt_lib::format("{:d}:{:02d}{:s}", tm.tm_hour % 12, tm.tm_min, tm.tm_hour / 12 ? "PM" : "AM");
|
|
|
|
|
dest.append(formatted.data(), formatted.data() + formatted.size());
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@ -366,8 +345,8 @@ TEST_CASE("clone-custom_formatter", "[pattern_formatter]") {
|
|
|
|
|
formatter_1->format(msg, formatted_1);
|
|
|
|
|
formatter_2->format(msg, formatted_2);
|
|
|
|
|
|
|
|
|
|
auto expected = spdlog::fmt_lib::format("[logger-name] [custom_output] some message{}",
|
|
|
|
|
spdlog::details::os::default_eol);
|
|
|
|
|
auto expected =
|
|
|
|
|
spdlog::fmt_lib::format("[logger-name] [custom_output] some message{}", spdlog::details::os::default_eol);
|
|
|
|
|
|
|
|
|
|
REQUIRE(to_string_view(formatted_1) == expected);
|
|
|
|
|
REQUIRE(to_string_view(formatted_2) == expected);
|
|
|
|
@ -435,11 +414,10 @@ TEST_CASE("custom flags", "[pattern_formatter]") {
|
|
|
|
|
|
|
|
|
|
memory_buf_t formatted;
|
|
|
|
|
|
|
|
|
|
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info,
|
|
|
|
|
"some message");
|
|
|
|
|
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info, "some message");
|
|
|
|
|
formatter->format(msg, formatted);
|
|
|
|
|
auto expected = spdlog::fmt_lib::format("[logger-name] [custom1] [custom2] some message{}",
|
|
|
|
|
spdlog::details::os::default_eol);
|
|
|
|
|
auto expected =
|
|
|
|
|
spdlog::fmt_lib::format("[logger-name] [custom1] [custom2] some message{}", spdlog::details::os::default_eol);
|
|
|
|
|
|
|
|
|
|
REQUIRE(to_string_view(formatted) == expected);
|
|
|
|
|
}
|
|
|
|
@ -452,8 +430,7 @@ TEST_CASE("custom flags-padding", "[pattern_formatter]") {
|
|
|
|
|
|
|
|
|
|
memory_buf_t formatted;
|
|
|
|
|
|
|
|
|
|
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info,
|
|
|
|
|
"some message");
|
|
|
|
|
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info, "some message");
|
|
|
|
|
formatter->format(msg, formatted);
|
|
|
|
|
auto expected = spdlog::fmt_lib::format("[logger-name] [custom1] [ custom2] some message{}",
|
|
|
|
|
spdlog::details::os::default_eol);
|
|
|
|
@ -468,20 +445,17 @@ TEST_CASE("custom flags-exception", "[pattern_formatter]") {
|
|
|
|
|
.set_pattern("[%n] [%t] [%u] %v");
|
|
|
|
|
|
|
|
|
|
memory_buf_t formatted;
|
|
|
|
|
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info,
|
|
|
|
|
"some message");
|
|
|
|
|
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info, "some message");
|
|
|
|
|
CHECK_THROWS_AS(formatter->format(msg, formatted), spdlog::spdlog_ex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("override need_localtime", "[pattern_formatter]") {
|
|
|
|
|
auto formatter =
|
|
|
|
|
std::make_shared<spdlog::pattern_formatter>(spdlog::pattern_time_type::local, "\n");
|
|
|
|
|
auto formatter = std::make_shared<spdlog::pattern_formatter>(spdlog::pattern_time_type::local, "\n");
|
|
|
|
|
formatter->add_flag<custom_test_flag>('t', "time").set_pattern("%t> %v");
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
memory_buf_t formatted;
|
|
|
|
|
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info,
|
|
|
|
|
"some message");
|
|
|
|
|
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info, "some message");
|
|
|
|
|
formatter->format(msg, formatted);
|
|
|
|
|
REQUIRE(to_string_view(formatted) == "0:00AM> some message\n");
|
|
|
|
|
}
|
|
|
|
@ -495,8 +469,7 @@ TEST_CASE("override need_localtime", "[pattern_formatter]") {
|
|
|
|
|
<< (now_tm.tm_hour / 12 ? "PM" : "AM") << "> some message\n";
|
|
|
|
|
|
|
|
|
|
memory_buf_t formatted;
|
|
|
|
|
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info,
|
|
|
|
|
"some message");
|
|
|
|
|
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info, "some message");
|
|
|
|
|
formatter->format(msg, formatted);
|
|
|
|
|
REQUIRE(to_string_view(formatted) == oss.str());
|
|
|
|
|
}
|
|
|
|
|