Blame view

3rdparty/spdlog-1.9.2/tests/test_file_logging.cpp 3.03 KB
3d2ab595   Hu Chunming   支持gb28181
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
  /*
   * This content is released under the MIT License as specified in https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
   */
  #include "includes.h"
  
  #define SIMPLE_LOG "test_logs/simple_log"
  #define ROTATING_LOG "test_logs/rotating_log"
  
  TEST_CASE("simple_file_logger", "[simple_logger]]")
  {
      prepare_logdir();
      spdlog::filename_t filename = SPDLOG_FILENAME_T(SIMPLE_LOG);
  
      auto logger = spdlog::create<spdlog::sinks::basic_file_sink_mt>("logger", filename);
      logger->set_pattern("%v");
  
      logger->info("Test message {}", 1);
      logger->info("Test message {}", 2);
  
      logger->flush();
      require_message_count(SIMPLE_LOG, 2);
      using spdlog::details::os::default_eol;
      REQUIRE(file_contents(SIMPLE_LOG) == fmt::format("Test message 1{}Test message 2{}", default_eol, default_eol));
  }
  
  TEST_CASE("flush_on", "[flush_on]]")
  {
      prepare_logdir();
      spdlog::filename_t filename = SPDLOG_FILENAME_T(SIMPLE_LOG);
  
      auto logger = spdlog::create<spdlog::sinks::basic_file_sink_mt>("logger", filename);
      logger->set_pattern("%v");
      logger->set_level(spdlog::level::trace);
      logger->flush_on(spdlog::level::info);
      logger->trace("Should not be flushed");
      REQUIRE(count_lines(SIMPLE_LOG) == 0);
  
      logger->info("Test message {}", 1);
      logger->info("Test message {}", 2);
  
      require_message_count(SIMPLE_LOG, 3);
      using spdlog::details::os::default_eol;
      REQUIRE(file_contents(SIMPLE_LOG) ==
              fmt::format("Should not be flushed{}Test message 1{}Test message 2{}", default_eol, default_eol, default_eol));
  }
  
  TEST_CASE("rotating_file_logger1", "[rotating_logger]]")
  {
      prepare_logdir();
      size_t max_size = 1024 * 10;
      spdlog::filename_t basename = SPDLOG_FILENAME_T(ROTATING_LOG);
      auto logger = spdlog::rotating_logger_mt("logger", basename, max_size, 0);
  
      for (int i = 0; i < 10; ++i)
      {
          logger->info("Test message {}", i);
      }
  
      logger->flush();
      require_message_count(ROTATING_LOG, 10);
  }
  
  TEST_CASE("rotating_file_logger2", "[rotating_logger]]")
  {
      prepare_logdir();
      size_t max_size = 1024 * 10;
      spdlog::filename_t basename = SPDLOG_FILENAME_T(ROTATING_LOG);
  
      {
          // make an initial logger to create the first output file
          auto logger = spdlog::rotating_logger_mt("logger", basename, max_size, 2, true);
          for (int i = 0; i < 10; ++i)
          {
              logger->info("Test message {}", i);
          }
          // drop causes the logger destructor to be called, which is required so the
          // next logger can rename the first output file.
          spdlog::drop(logger->name());
      }
  
      auto logger = spdlog::rotating_logger_mt("logger", basename, max_size, 2, true);
      for (int i = 0; i < 10; ++i)
      {
          logger->info("Test message {}", i);
      }
  
      logger->flush();
  
      require_message_count(ROTATING_LOG, 10);
  
      for (int i = 0; i < 1000; i++)
      {
  
          logger->info("Test message {}", i);
      }
  
      logger->flush();
      REQUIRE(get_filesize(ROTATING_LOG) <= max_size);
      REQUIRE(get_filesize(ROTATING_LOG ".1") <= max_size);
  }