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(100); |
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 | |