1 #include "includes.h" 2 #include "test_sink.h" 3 #include "spdlog/async.h" 4 5 TEST_CASE("bactrace1", "[bactrace]") 6 { 7 8 using spdlog::sinks::test_sink_st; 9 auto test_sink = std::make_shared<test_sink_st>(); 10 size_t backtrace_size = 5; 11 12 spdlog::logger logger("test-backtrace", test_sink); 13 logger.set_pattern("%v"); 14 logger.enable_backtrace(backtrace_size); 15 16 logger.info("info message"); 17 for (int i = 0; i < 100; i++) 18 logger.debug("debug message {}", i); 19 20 REQUIRE(test_sink->lines().size() == 1); 21 REQUIRE(test_sink->lines()[0] == "info message"); 22 23 logger.dump_backtrace(); 24 REQUIRE(test_sink->lines().size() == backtrace_size + 3); 25 REQUIRE(test_sink->lines()[1] == "****************** Backtrace Start ******************"); 26 REQUIRE(test_sink->lines()[2] == "debug message 95"); 27 REQUIRE(test_sink->lines()[3] == "debug message 96"); 28 REQUIRE(test_sink->lines()[4] == "debug message 97"); 29 REQUIRE(test_sink->lines()[5] == "debug message 98"); 30 REQUIRE(test_sink->lines()[6] == "debug message 99"); 31 REQUIRE(test_sink->lines()[7] == "****************** Backtrace End ********************"); 32 } 33 34 TEST_CASE("bactrace-async", "[bactrace]") 35 { 36 using spdlog::sinks::test_sink_mt; 37 auto test_sink = std::make_shared<test_sink_mt>(); 38 using spdlog::details::os::sleep_for_millis; 39 40 size_t backtrace_size = 5; 41 42 spdlog::init_thread_pool(120, 1); 43 auto logger = std::make_shared<spdlog::async_logger>("test-bactrace-async", test_sink, spdlog::thread_pool()); 44 logger->set_pattern("%v"); 45 logger->enable_backtrace(backtrace_size); 46 47 logger->info("info message"); 48 for (int i = 0; i < 100; i++) 49 logger->debug("debug message {}", i); 50 51 sleep_for_millis(10); 52 REQUIRE(test_sink->lines().size() == 1); 53 REQUIRE(test_sink->lines()[0] == "info message"); 54 55 logger->dump_backtrace(); 56 sleep_for_millis(100); // give time for the async dump to complete 57 REQUIRE(test_sink->lines().size() == backtrace_size + 3); 58 REQUIRE(test_sink->lines()[1] == "****************** Backtrace Start ******************"); 59 REQUIRE(test_sink->lines()[2] == "debug message 95"); 60 REQUIRE(test_sink->lines()[3] == "debug message 96"); 61 REQUIRE(test_sink->lines()[4] == "debug message 97"); 62 REQUIRE(test_sink->lines()[5] == "debug message 98"); 63 REQUIRE(test_sink->lines()[6] == "debug message 99"); 64 REQUIRE(test_sink->lines()[7] == "****************** Backtrace End ********************"); 65 } 66