015-logger.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. // SPDX-FileCopyrightText: 2019-2023 Ivan Baidakou
  3. #include "test-utils.h"
  4. #include "utils/log.h"
  5. namespace st = syncspirit::test;
  6. namespace bfs = boost::filesystem;
  7. using namespace syncspirit;
  8. using L = spdlog::level::level_enum;
  9. bool overwrite = false;
  10. TEST_CASE("default logger", "[log]") {
  11. config::log_configs_t cfg{{"default", L::trace, {"stdout"}}};
  12. REQUIRE(utils::init_loggers(cfg, overwrite));
  13. auto l = utils::get_logger("default");
  14. CHECK(l);
  15. CHECK(l->level() == L::trace);
  16. }
  17. TEST_CASE("hierarchy", "[log]") {
  18. config::log_configs_t cfg{{"default", L::trace, {"stdout"}}, {"a", L::info, {}}, {"a.b.c", L::warn, {}}};
  19. REQUIRE(utils::init_loggers(cfg, overwrite));
  20. SECTION("custom") {
  21. auto l = utils::get_logger("a");
  22. REQUIRE(l);
  23. CHECK(l->level() == L::info);
  24. }
  25. SECTION("submatch") {
  26. auto l = utils::get_logger("a.b");
  27. REQUIRE(l);
  28. CHECK(l->level() == L::info);
  29. }
  30. SECTION("full match") {
  31. auto l = utils::get_logger("a.b.c");
  32. REQUIRE(l);
  33. CHECK(l->level() == L::warn);
  34. }
  35. SECTION("mismatch") {
  36. auto l = utils::get_logger("xxx");
  37. REQUIRE(l);
  38. CHECK(l->level() == L::trace);
  39. }
  40. }
  41. TEST_CASE("file sink", "[log]") {
  42. auto dir = bfs::path{bfs::unique_path()};
  43. auto path_guard = st::path_guard_t{dir};
  44. bfs::create_directory(dir);
  45. auto file_path = fmt::format("{}/log.txt", dir.string());
  46. auto sink_config = fmt::format("file:{}", file_path);
  47. config::log_configs_t cfg{{"default", L::trace, {sink_config}}};
  48. REQUIRE(utils::init_loggers(cfg, overwrite));
  49. auto l = utils::get_logger("default");
  50. l->info("lorem ipsum dolor");
  51. l->flush();
  52. spdlog::drop_all(); // to cleanup on win32
  53. auto data = st::read_file(bfs::path(file_path));
  54. CHECK(!data.empty());
  55. CHECK(data.find("lorem ipsum dolor") != std::string::npos);
  56. }