mirror of
https://github.com/gabime/spdlog.git
synced 2025-09-28 17:19:34 +08:00
@@ -34,8 +34,7 @@ set(SPDLOG_UTESTS_SOURCES
|
||||
test_misc.cpp
|
||||
test_pattern_formatter.cpp
|
||||
test_async.cpp
|
||||
test_registry.cpp
|
||||
test_macros.cpp
|
||||
test_macros.cpp
|
||||
utils.cpp
|
||||
main.cpp
|
||||
test_mpmc_q.cpp
|
||||
@@ -44,8 +43,7 @@ set(SPDLOG_UTESTS_SOURCES
|
||||
test_stdout_api.cpp
|
||||
test_create_dir.cpp
|
||||
test_custom_callbacks.cpp
|
||||
test_cfg.cpp
|
||||
test_time_point.cpp
|
||||
test_time_point.cpp
|
||||
test_stopwatch.cpp
|
||||
test_circular_q.cpp
|
||||
test_ringbuffer_sink.cpp
|
||||
|
@@ -68,7 +68,6 @@ TEST_CASE("discard policy using factory ", "[async]") {
|
||||
}
|
||||
|
||||
REQUIRE(test_sink->msg_counter() < messages);
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("flush", "[async]") {
|
||||
@@ -89,17 +88,6 @@ TEST_CASE("flush", "[async]") {
|
||||
REQUIRE(test_sink->flush_counter() == 1);
|
||||
}
|
||||
|
||||
TEST_CASE("async periodic flush", "[async]") {
|
||||
auto logger = spdlog::create_async<spdlog::sinks::test_sink_mt>("as");
|
||||
auto test_sink = std::static_pointer_cast<spdlog::sinks::test_sink_mt>(logger->sinks()[0]);
|
||||
|
||||
spdlog::flush_every(std::chrono::seconds(1));
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1700));
|
||||
REQUIRE(test_sink->flush_counter() == 1);
|
||||
spdlog::flush_every(std::chrono::seconds(0));
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("tp->wait_empty() ", "[async]") {
|
||||
auto test_sink = std::make_shared<spdlog::sinks::test_sink_mt>();
|
||||
test_sink->set_delay(std::chrono::milliseconds(5));
|
||||
|
@@ -1,168 +0,0 @@
|
||||
|
||||
#include "includes.h"
|
||||
#include "spdlog/cfg/argv.h"
|
||||
#include "spdlog/cfg/env.h"
|
||||
#include "test_sink.h"
|
||||
|
||||
using spdlog::cfg::load_argv_levels;
|
||||
using spdlog::cfg::load_env_levels;
|
||||
using spdlog::sinks::test_sink_st;
|
||||
|
||||
TEST_CASE("env", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
auto l1 = spdlog::create<test_sink_st>("l1");
|
||||
#ifdef CATCH_PLATFORM_WINDOWS
|
||||
_putenv_s("SPDLOG_LEVEL", "l1=warn");
|
||||
#else
|
||||
setenv("SPDLOG_LEVEL", "l1=warn", 1);
|
||||
#endif
|
||||
load_env_levels();
|
||||
REQUIRE(l1->log_level() == spdlog::level::warn);
|
||||
spdlog::set_default_logger(spdlog::create<test_sink_st>("cfg-default"));
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("argv1", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=warn"};
|
||||
load_argv_levels(2, argv);
|
||||
auto l1 = spdlog::create<spdlog::sinks::test_sink_st>("l1");
|
||||
REQUIRE(l1->log_level() == spdlog::level::warn);
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("argv2", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=warn,trace"};
|
||||
load_argv_levels(2, argv);
|
||||
auto l1 = spdlog::create<test_sink_st>("l1");
|
||||
REQUIRE(l1->log_level() == spdlog::level::warn);
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::trace);
|
||||
}
|
||||
|
||||
TEST_CASE("argv3", "[cfg]") {
|
||||
spdlog::set_level(spdlog::level::trace);
|
||||
|
||||
spdlog::drop("l1");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=junk_name=warn"};
|
||||
load_argv_levels(2, argv);
|
||||
auto l1 = spdlog::create<test_sink_st>("l1");
|
||||
REQUIRE(l1->log_level() == spdlog::level::trace);
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::trace);
|
||||
}
|
||||
|
||||
TEST_CASE("argv4", "[cfg]") {
|
||||
spdlog::set_level(spdlog::level::info);
|
||||
spdlog::drop("l1");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=junk"};
|
||||
load_argv_levels(2, argv);
|
||||
auto l1 = spdlog::create<test_sink_st>("l1");
|
||||
REQUIRE(l1->log_level() == spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("argv5", "[cfg]") {
|
||||
spdlog::set_level(spdlog::level::info);
|
||||
spdlog::drop("l1");
|
||||
const char *argv[] = {"ignore", "ignore", "SPDLOG_LEVEL=l1=warn,trace"};
|
||||
load_argv_levels(3, argv);
|
||||
auto l1 = spdlog::create<test_sink_st>("l1");
|
||||
REQUIRE(l1->log_level() == spdlog::level::warn);
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::trace);
|
||||
spdlog::set_level(spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("argv6", "[cfg]") {
|
||||
spdlog::set_level(spdlog::level::err);
|
||||
const char *argv[] = {""};
|
||||
load_argv_levels(1, argv);
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::err);
|
||||
spdlog::set_level(spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("argv7", "[cfg]") {
|
||||
spdlog::set_level(spdlog::level::err);
|
||||
const char *argv[] = {""};
|
||||
load_argv_levels(0, argv);
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::err);
|
||||
spdlog::set_level(spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("level-not-set-test1", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
const char *argv[] = {"ignore", ""};
|
||||
load_argv_levels(2, argv);
|
||||
auto l1 = spdlog::create<spdlog::sinks::test_sink_st>("l1");
|
||||
l1->set_level(spdlog::level::trace);
|
||||
REQUIRE(l1->log_level() == spdlog::level::trace);
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("level-not-set-test2", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
spdlog::drop("l2");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=trace"};
|
||||
|
||||
auto l1 = spdlog::create<spdlog::sinks::test_sink_st>("l1");
|
||||
l1->set_level(spdlog::level::warn);
|
||||
auto l2 = spdlog::create<spdlog::sinks::test_sink_st>("l2");
|
||||
l2->set_level(spdlog::level::warn);
|
||||
|
||||
load_argv_levels(2, argv);
|
||||
|
||||
REQUIRE(l1->log_level() == spdlog::level::trace);
|
||||
REQUIRE(l2->log_level() == spdlog::level::warn);
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("level-not-set-test3", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
spdlog::drop("l2");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=trace"};
|
||||
|
||||
load_argv_levels(2, argv);
|
||||
|
||||
auto l1 = spdlog::create<spdlog::sinks::test_sink_st>("l1");
|
||||
auto l2 = spdlog::create<spdlog::sinks::test_sink_st>("l2");
|
||||
|
||||
REQUIRE(l1->log_level() == spdlog::level::trace);
|
||||
REQUIRE(l2->log_level() == spdlog::level::info);
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("level-not-set-test4", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
spdlog::drop("l2");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=trace,warn"};
|
||||
|
||||
load_argv_levels(2, argv);
|
||||
|
||||
auto l1 = spdlog::create<spdlog::sinks::test_sink_st>("l1");
|
||||
auto l2 = spdlog::create<spdlog::sinks::test_sink_st>("l2");
|
||||
|
||||
REQUIRE(l1->log_level() == spdlog::level::trace);
|
||||
REQUIRE(l2->log_level() == spdlog::level::warn);
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::warn);
|
||||
}
|
||||
|
||||
TEST_CASE("level-not-set-test5", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
spdlog::drop("l2");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=junk,warn"};
|
||||
|
||||
load_argv_levels(2, argv);
|
||||
|
||||
auto l1 = spdlog::create<spdlog::sinks::test_sink_st>("l1");
|
||||
auto l2 = spdlog::create<spdlog::sinks::test_sink_st>("l2");
|
||||
|
||||
REQUIRE(l1->log_level() == spdlog::level::warn);
|
||||
REQUIRE(l2->log_level() == spdlog::level::warn);
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::warn);
|
||||
}
|
||||
|
||||
TEST_CASE("restore-to-default", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
spdlog::drop("l2");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=info"};
|
||||
load_argv_levels(2, argv);
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::info);
|
||||
}
|
@@ -43,8 +43,8 @@ TEST_CASE("create_invalid_dir", "[create_dir]") {
|
||||
}
|
||||
|
||||
TEST_CASE("dir_name", "[create_dir]") {
|
||||
using spdlog::details::os::dir_name;
|
||||
#ifdef WIN32
|
||||
using spdlog::details::os::dir_name;
|
||||
#ifdef WIN32
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(dir\)")) == SPDLOG_FILENAME_T("dir"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(dir\\\)")) == SPDLOG_FILENAME_T(R"(dir)"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(dir\file)")) == SPDLOG_FILENAME_T("dir"));
|
||||
@@ -60,19 +60,19 @@ TEST_CASE("dir_name", "[create_dir]") {
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(c://a/b/c/d/file.txt)")) == SPDLOG_FILENAME_T(R"(c://a/b/c/d)"));
|
||||
#endif
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("")).empty());
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("dir")).empty());
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("dir")).empty());
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("dir/")) == SPDLOG_FILENAME_T("dir"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("dir///")) == SPDLOG_FILENAME_T("dir"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("dir/file")) == SPDLOG_FILENAME_T("dir"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("dir/file.txt")) == SPDLOG_FILENAME_T("dir"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("dir/file.txt/")) == SPDLOG_FILENAME_T("dir/file.txt"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("/dir/file.txt")) == SPDLOG_FILENAME_T("/dir"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("/dir/file.txt")) == SPDLOG_FILENAME_T("/dir"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("../file.txt")) == SPDLOG_FILENAME_T(".."));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("./file.txt")) == SPDLOG_FILENAME_T("."));
|
||||
|
||||
#ifdef _WIN32
|
||||
#ifdef _WIN32
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("//dir/file.txt")) == SPDLOG_FILENAME_T("//dir/"));
|
||||
#else
|
||||
#else
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("//dir/file.txt")) == SPDLOG_FILENAME_T("//dir"));
|
||||
#endif
|
||||
}
|
||||
|
@@ -30,5 +30,4 @@ TEST_CASE("custom_callback_logger", "[custom_callback_logger]") {
|
||||
REQUIRE(lines[0] == ref_lines[0]);
|
||||
REQUIRE(lines[1] == ref_lines[1]);
|
||||
REQUIRE(lines[2] == ref_lines[2]);
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
@@ -4,8 +4,8 @@
|
||||
*/
|
||||
#include "includes.h"
|
||||
#include "spdlog/sinks/daily_file_sink.h"
|
||||
#include "spdlog/sinks/rotating_file_sink.h"
|
||||
#include "spdlog/sinks/hourly_file_sink.h"
|
||||
#include "spdlog/sinks/rotating_file_sink.h"
|
||||
|
||||
using filename_memory_buf_t = spdlog::memory_buf_t;
|
||||
|
||||
@@ -48,8 +48,7 @@ TEST_CASE("daily_logger with custom calculator", "[daily_logger]") {
|
||||
std::tm tm = spdlog::details::os::localtime();
|
||||
|
||||
auto w = spdlog::fmt_lib::format(SPDLOG_FILENAME_T("{}{:04d}{:02d}{:02d}"), basename.native(), tm.tm_year + 1900,
|
||||
tm.tm_mon + 1,
|
||||
tm.tm_mday);
|
||||
tm.tm_mon + 1, tm.tm_mday);
|
||||
|
||||
auto logger = spdlog::create<sink_type>("logger", basename, 0, 0);
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
@@ -82,26 +81,24 @@ TEST_CASE("rotating_file_sink::calc_filename3", "[rotating_file_sink]") {
|
||||
// regex supported only from gcc 4.9 and above
|
||||
#if defined(_MSC_VER) || !(__GNUC__ <= 4 && __GNUC_MINOR__ < 9)
|
||||
|
||||
#include <regex>
|
||||
#include <regex>
|
||||
|
||||
TEST_CASE("daily_file_sink::daily_filename_calculator", "[daily_file_sink]") {
|
||||
// daily_YYYY-MM-DD_hh-mm.txt
|
||||
auto filename =
|
||||
spdlog::sinks::daily_filename_calculator::calc_filename(SPDLOG_FILENAME_T("daily.txt"),
|
||||
spdlog::details::os::localtime());
|
||||
auto filename =
|
||||
spdlog::sinks::daily_filename_calculator::calc_filename(SPDLOG_FILENAME_T("daily.txt"), spdlog::details::os::localtime());
|
||||
// date regex based on https://www.regular-expressions.info/dates.html
|
||||
std::basic_regex<spdlog::filename_t::value_type> re(
|
||||
SPDLOG_FILENAME_T(R"(^daily_(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])\.txt$)"));
|
||||
|
||||
std::match_results<spdlog::filename_t::string_type::const_iterator> match;
|
||||
REQUIRE(std::regex_match(filename.native(), match, re));
|
||||
}
|
||||
std::basic_regex<spdlog::filename_t::value_type> re(
|
||||
SPDLOG_FILENAME_T(R"(^daily_(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])\.txt$)"));
|
||||
|
||||
std::match_results<spdlog::filename_t::string_type::const_iterator> match;
|
||||
REQUIRE(std::regex_match(filename.native(), match, re));
|
||||
}
|
||||
|
||||
TEST_CASE("hourly_file_sink::hourly_filename_calculator", "[hrouly_file_sink]") {
|
||||
// daily_YYYY-MM-DD_hh-mm.txt
|
||||
auto filename =
|
||||
spdlog::sinks::hourly_filename_calculator::calc_filename(SPDLOG_FILENAME_T("hourly.txt"), spdlog::details::os::localtime());
|
||||
auto filename = spdlog::sinks::hourly_filename_calculator::calc_filename(SPDLOG_FILENAME_T("hourly.txt"),
|
||||
spdlog::details::os::localtime());
|
||||
// date regex based on https://www.regular-expressions.info/dates.html
|
||||
std::basic_regex<spdlog::filename_t::value_type> re(
|
||||
SPDLOG_FILENAME_T(R"(^hourly_(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])_\d\d\.txt$)"));
|
||||
|
@@ -10,7 +10,7 @@
|
||||
#define SIMPLE_LOG "test_logs/simple_log.txt"
|
||||
#define SIMPLE_ASYNC_LOG "test_logs/simple_async_log.txt"
|
||||
|
||||
class failing_sink : public spdlog::sinks::base_sink<std::mutex> {
|
||||
class failing_sink final : public spdlog::sinks::base_sink<std::mutex> {
|
||||
protected:
|
||||
void sink_it_(const spdlog::details::log_msg &) final { throw std::runtime_error("some error happened during log"); }
|
||||
|
||||
@@ -21,8 +21,7 @@ struct custom_ex {};
|
||||
TEST_CASE("default_error_handler", "[errors]") {
|
||||
prepare_logdir();
|
||||
spdlog::filename_t filename = SPDLOG_FILENAME_T(SIMPLE_LOG);
|
||||
|
||||
auto logger = spdlog::create<spdlog::sinks::basic_file_sink_mt>("test-error", filename, true);
|
||||
auto logger = spdlog::basic_logger_mt("test-error", filename);
|
||||
logger->set_pattern("%v");
|
||||
logger->info(SPDLOG_FMT_RUNTIME("Test message {} {}"), 1);
|
||||
logger->info("Test message {}", 2);
|
||||
@@ -35,25 +34,22 @@ TEST_CASE("default_error_handler", "[errors]") {
|
||||
TEST_CASE("custom_error_handler", "[errors]") {
|
||||
prepare_logdir();
|
||||
spdlog::filename_t filename = SPDLOG_FILENAME_T(SIMPLE_LOG);
|
||||
auto logger = spdlog::create<spdlog::sinks::basic_file_sink_mt>("logger", filename, true);
|
||||
auto logger = spdlog::basic_logger_mt("test-error", filename);
|
||||
logger->flush_on(spdlog::level::info);
|
||||
logger->set_error_handler([=](const std::string &) { throw custom_ex(); });
|
||||
logger->info("Good message #1");
|
||||
|
||||
REQUIRE_THROWS_AS(logger->info(SPDLOG_FMT_RUNTIME("Bad format msg {} {}"), "xxx"), custom_ex);
|
||||
logger->info("Good message #2");
|
||||
require_message_count(SIMPLE_LOG, 2);
|
||||
}
|
||||
|
||||
TEST_CASE("default_error_handler2", "[errors]") {
|
||||
spdlog::drop_all();
|
||||
auto logger = spdlog::create<failing_sink>("failed_logger");
|
||||
auto logger = std::make_shared<spdlog::logger>("failed_logger", std::make_shared<failing_sink>());
|
||||
logger->set_error_handler([=](const std::string &) { throw custom_ex(); });
|
||||
REQUIRE_THROWS_AS(logger->info("Some message"), custom_ex);
|
||||
}
|
||||
|
||||
TEST_CASE("flush_error_handler", "[errors]") {
|
||||
spdlog::drop_all();
|
||||
auto logger = spdlog::create<failing_sink>("failed_logger");
|
||||
logger->set_error_handler([=](const std::string &) { throw custom_ex(); });
|
||||
REQUIRE_THROWS_AS(logger->flush(), custom_ex);
|
||||
@@ -77,7 +73,6 @@ TEST_CASE("async_error_handler", "[errors]") {
|
||||
logger->info("Good message #1");
|
||||
logger->info(SPDLOG_FMT_RUNTIME("Bad format msg {} {}"), "xxx");
|
||||
logger->info("Good message #2");
|
||||
spdlog::drop("logger"); // force logger to drain the queue and shutdown
|
||||
}
|
||||
spdlog::init_thread_pool(128, 1);
|
||||
require_message_count(SIMPLE_ASYNC_LOG, 2);
|
||||
@@ -98,7 +93,6 @@ TEST_CASE("async_error_handler2", "[errors]") {
|
||||
ofs << err_msg;
|
||||
});
|
||||
logger->info("Hello failure");
|
||||
spdlog::drop("failed_logger"); // force logger to drain the queue and shutdown
|
||||
}
|
||||
|
||||
spdlog::init_thread_pool(128, 1);
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
using spdlog::details::file_helper;
|
||||
|
||||
static void write_with_helper(file_helper &helper, size_t howmany) {
|
||||
static void write_with_helper(const file_helper &helper, size_t howmany) {
|
||||
spdlog::memory_buf_t formatted;
|
||||
spdlog::fmt_lib::format_to(std::back_inserter(formatted), "{}", std::string(howmany, '1'));
|
||||
helper.write(formatted);
|
||||
|
@@ -12,13 +12,10 @@
|
||||
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);
|
||||
auto logger = spdlog::basic_logger_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;
|
||||
@@ -28,17 +25,14 @@ TEST_CASE("simple_file_logger", "[simple_logger]") {
|
||||
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);
|
||||
auto logger = spdlog::basic_logger_mt("test-error", 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) == spdlog::fmt_lib::format("Should not be flushed{}Test message 1{}Test message 2{}",
|
||||
@@ -70,9 +64,6 @@ TEST_CASE("rotating_file_logger2", "[rotating_logger]") {
|
||||
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);
|
||||
|
@@ -15,8 +15,7 @@
|
||||
TEST_CASE("debug and trace w/o format string", "[macros]") {
|
||||
prepare_logdir();
|
||||
spdlog::filename_t filename = SPDLOG_FILENAME_T(TEST_FILENAME);
|
||||
|
||||
auto logger = spdlog::create<spdlog::sinks::basic_file_sink_mt>("logger", filename);
|
||||
auto logger = spdlog::basic_logger_mt("logger", filename);
|
||||
logger->set_pattern("%v");
|
||||
logger->set_level(spdlog::level::trace);
|
||||
|
||||
@@ -28,8 +27,8 @@ TEST_CASE("debug and trace w/o format string", "[macros]") {
|
||||
REQUIRE(ends_with(file_contents(TEST_FILENAME), spdlog::fmt_lib::format("Test message 2{}", default_eol)));
|
||||
REQUIRE(count_lines(TEST_FILENAME) == 1);
|
||||
|
||||
auto orig_default_logger = spdlog::default_logger();
|
||||
spdlog::set_default_logger(logger);
|
||||
auto orig_global_logger = spdlog::global_logger();
|
||||
spdlog::set_global_logger(logger);
|
||||
|
||||
SPDLOG_TRACE("Test message 3");
|
||||
SPDLOG_DEBUG("Test message {}", 4);
|
||||
@@ -37,7 +36,7 @@ TEST_CASE("debug and trace w/o format string", "[macros]") {
|
||||
|
||||
require_message_count(TEST_FILENAME, 2);
|
||||
REQUIRE(ends_with(file_contents(TEST_FILENAME), spdlog::fmt_lib::format("Test message 4{}", default_eol)));
|
||||
spdlog::set_default_logger(std::move(orig_default_logger));
|
||||
spdlog::set_global_logger(std::move(orig_global_logger));
|
||||
}
|
||||
|
||||
TEST_CASE("disable param evaluation", "[macros]") {
|
||||
@@ -45,7 +44,7 @@ TEST_CASE("disable param evaluation", "[macros]") {
|
||||
}
|
||||
|
||||
TEST_CASE("pass logger pointer", "[macros]") {
|
||||
auto logger = spdlog::create<spdlog::sinks::null_sink_mt>("refmacro");
|
||||
auto logger = spdlog::null_logger_mt("refmacro");
|
||||
auto &ref = *logger;
|
||||
SPDLOG_LOGGER_TRACE(&ref, "Test message 1");
|
||||
SPDLOG_LOGGER_DEBUG(&ref, "Test message 2");
|
||||
|
@@ -73,18 +73,6 @@ TEST_CASE("to_level_enum", "[convert_to_level_enum]") {
|
||||
REQUIRE(spdlog::level_from_str("null") == spdlog::level::off);
|
||||
}
|
||||
|
||||
TEST_CASE("periodic flush", "[periodic_flush]") {
|
||||
using spdlog::sinks::test_sink_mt;
|
||||
auto logger = spdlog::create<test_sink_mt>("periodic_flush");
|
||||
auto test_sink = std::static_pointer_cast<test_sink_mt>(logger->sinks()[0]);
|
||||
|
||||
spdlog::flush_every(std::chrono::seconds(1));
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1250));
|
||||
REQUIRE(test_sink->flush_counter() == 1);
|
||||
spdlog::flush_every(std::chrono::seconds(0));
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("clone-logger", "[clone]") {
|
||||
using spdlog::sinks::test_sink_mt;
|
||||
auto test_sink = std::make_shared<test_sink_mt>();
|
||||
@@ -102,8 +90,6 @@ TEST_CASE("clone-logger", "[clone]") {
|
||||
REQUIRE(test_sink->lines().size() == 2);
|
||||
REQUIRE(test_sink->lines()[0] == "Some message 1");
|
||||
REQUIRE(test_sink->lines()[1] == "Some message 2");
|
||||
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("clone async", "[clone]") {
|
||||
@@ -127,18 +113,16 @@ TEST_CASE("clone async", "[clone]") {
|
||||
REQUIRE(test_sink->lines().size() == 2);
|
||||
REQUIRE(test_sink->lines()[0] == "Some message 1");
|
||||
REQUIRE(test_sink->lines()[1] == "Some message 2");
|
||||
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("default logger API", "[default logger]") {
|
||||
TEST_CASE("global logger API", "[global logger]") {
|
||||
std::ostringstream oss;
|
||||
auto oss_sink = std::make_shared<spdlog::sinks::ostream_sink_mt>(oss);
|
||||
|
||||
spdlog::set_default_logger(std::make_shared<spdlog::logger>("oss", oss_sink));
|
||||
spdlog::set_global_logger(std::make_shared<spdlog::logger>("oss", oss_sink));
|
||||
spdlog::set_pattern("*** %v");
|
||||
|
||||
spdlog::default_logger()->set_level(spdlog::level::trace);
|
||||
spdlog::global_logger()->set_level(spdlog::level::trace);
|
||||
spdlog::trace("hello trace");
|
||||
REQUIRE(oss.str() == "*** hello trace" + std::string(spdlog::details::os::default_eol));
|
||||
|
||||
@@ -162,7 +146,6 @@ TEST_CASE("default logger API", "[default logger]") {
|
||||
spdlog::set_level(spdlog::level::info);
|
||||
spdlog::debug("should not be logged");
|
||||
REQUIRE(oss.str().empty());
|
||||
spdlog::drop_all();
|
||||
spdlog::set_pattern("%v");
|
||||
}
|
||||
|
||||
|
@@ -292,7 +292,7 @@ TEST_CASE("clone-formatter-2", "[pattern_formatter]") {
|
||||
REQUIRE(to_string_view(formatted_1) == to_string_view(formatted_2));
|
||||
}
|
||||
|
||||
class custom_test_flag : public spdlog::custom_flag_formatter {
|
||||
class custom_test_flag final : public spdlog::custom_flag_formatter {
|
||||
public:
|
||||
explicit custom_test_flag(std::string txt)
|
||||
: some_txt{std::move(txt)} {}
|
||||
|
@@ -1,129 +0,0 @@
|
||||
#include <string_view>
|
||||
|
||||
#include "includes.h"
|
||||
#include "spdlog/sinks/daily_file_sink.h"
|
||||
#include "spdlog/sinks/rotating_file_sink.h"
|
||||
|
||||
static const char *const tested_logger_name = "null_logger";
|
||||
static const char *const tested_logger_name2 = "null_logger2";
|
||||
|
||||
TEST_CASE("register_drop", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name);
|
||||
REQUIRE(spdlog::get(tested_logger_name) != nullptr);
|
||||
// Throw if registering existing name
|
||||
REQUIRE_THROWS_AS(spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name), spdlog::spdlog_ex);
|
||||
}
|
||||
|
||||
TEST_CASE("explicit register", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
auto logger = std::make_shared<spdlog::logger>(tested_logger_name, std::make_shared<spdlog::sinks::null_sink_st>());
|
||||
spdlog::register_logger(logger);
|
||||
REQUIRE(spdlog::get(tested_logger_name) != nullptr);
|
||||
// Throw if registering existing name
|
||||
REQUIRE_THROWS_AS(spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name), spdlog::spdlog_ex);
|
||||
}
|
||||
|
||||
TEST_CASE("apply_all", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
auto logger = std::make_shared<spdlog::logger>(tested_logger_name, std::make_shared<spdlog::sinks::null_sink_st>());
|
||||
spdlog::register_logger(logger);
|
||||
auto logger2 = std::make_shared<spdlog::logger>(tested_logger_name2, std::make_shared<spdlog::sinks::null_sink_st>());
|
||||
spdlog::register_logger(logger2);
|
||||
|
||||
int counter = 0;
|
||||
spdlog::apply_all([&counter](std::shared_ptr<spdlog::logger>) { counter++; });
|
||||
REQUIRE(counter == 2);
|
||||
|
||||
counter = 0;
|
||||
spdlog::drop(tested_logger_name2);
|
||||
spdlog::apply_all([&counter](std::shared_ptr<spdlog::logger> l) {
|
||||
REQUIRE(l->name() == tested_logger_name);
|
||||
counter++;
|
||||
});
|
||||
REQUIRE(counter == 1);
|
||||
}
|
||||
|
||||
TEST_CASE("drop", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name);
|
||||
spdlog::drop(tested_logger_name);
|
||||
REQUIRE_FALSE(spdlog::get(tested_logger_name));
|
||||
}
|
||||
|
||||
TEST_CASE("drop-default", "[registry]") {
|
||||
spdlog::set_default_logger(spdlog::null_logger_st(tested_logger_name));
|
||||
spdlog::drop(tested_logger_name);
|
||||
REQUIRE_FALSE(spdlog::default_logger());
|
||||
REQUIRE_FALSE(spdlog::get(tested_logger_name));
|
||||
}
|
||||
|
||||
TEST_CASE("drop_all", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name);
|
||||
spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name2);
|
||||
spdlog::drop_all();
|
||||
REQUIRE_FALSE(spdlog::get(tested_logger_name));
|
||||
REQUIRE_FALSE(spdlog::get(tested_logger_name2));
|
||||
REQUIRE_FALSE(spdlog::default_logger());
|
||||
}
|
||||
|
||||
TEST_CASE("drop non existing", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name);
|
||||
spdlog::drop("some_name");
|
||||
REQUIRE_FALSE(spdlog::get("some_name"));
|
||||
REQUIRE(spdlog::get(tested_logger_name));
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("default logger", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
spdlog::set_default_logger(spdlog::null_logger_st(tested_logger_name));
|
||||
REQUIRE(spdlog::get(tested_logger_name) == spdlog::default_logger());
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("set_default_logger(nullptr)", "[registry]") {
|
||||
spdlog::set_default_logger(nullptr);
|
||||
REQUIRE_FALSE(spdlog::default_logger());
|
||||
}
|
||||
|
||||
TEST_CASE("disable automatic registration", "[registry]") {
|
||||
// set some global parameters
|
||||
spdlog::level level = spdlog::level::warn;
|
||||
spdlog::set_level(level);
|
||||
// but disable automatic registration
|
||||
spdlog::set_automatic_registration(false);
|
||||
auto logger1 = spdlog::create<spdlog::sinks::daily_file_sink_st>(tested_logger_name, SPDLOG_FILENAME_T("filename"), 11, 59);
|
||||
auto logger2 = spdlog::create_async<spdlog::sinks::stdout_color_sink_mt>(tested_logger_name2);
|
||||
// loggers should not be part of the registry
|
||||
REQUIRE_FALSE(spdlog::get(tested_logger_name));
|
||||
REQUIRE_FALSE(spdlog::get(tested_logger_name2));
|
||||
// but make sure they are still initialized according to global defaults
|
||||
REQUIRE(logger1->log_level() == level);
|
||||
REQUIRE(logger2->log_level() == level);
|
||||
spdlog::set_level(spdlog::level::info);
|
||||
spdlog::set_automatic_registration(true);
|
||||
}
|
||||
|
||||
TEST_CASE("get(const char* name)", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name);
|
||||
REQUIRE(spdlog::get(tested_logger_name) != nullptr);
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("get(std::string_view name)", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name);
|
||||
REQUIRE(spdlog::get(std::string_view(tested_logger_name)) != nullptr);
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("get(std::string name)", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name);
|
||||
REQUIRE(spdlog::get(std::string(tested_logger_name)) != nullptr);
|
||||
spdlog::drop_all();
|
||||
}
|
@@ -16,7 +16,6 @@ TEST_CASE("stdout_st", "[stdout]") {
|
||||
l->warn("Test stdout_st");
|
||||
l->error("Test stdout_st");
|
||||
l->critical("Test stdout_st");
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("stderr_st", "[stderr]") {
|
||||
@@ -28,7 +27,6 @@ TEST_CASE("stderr_st", "[stderr]") {
|
||||
l->warn("Test stderr_st");
|
||||
l->error("Test stderr_st");
|
||||
l->critical("Test stderr_st");
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("stdout_mt", "[stdout]") {
|
||||
@@ -54,7 +52,6 @@ TEST_CASE("stdout_color_st", "[stdout]") {
|
||||
l->warn("Test stdout_color_st");
|
||||
l->error("Test stdout_color_st");
|
||||
l->critical("Test stdout_color_st");
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("stdout_color_mt", "[stdout]") {
|
||||
@@ -67,7 +64,6 @@ TEST_CASE("stdout_color_mt", "[stdout]") {
|
||||
l->warn("Test stdout_color_mt");
|
||||
l->error("Test stdout_color_mt");
|
||||
l->critical("Test stdout_color_mt");
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("stderr_color_st", "[stderr]") {
|
||||
@@ -75,7 +71,6 @@ TEST_CASE("stderr_color_st", "[stderr]") {
|
||||
l->set_pattern("%+");
|
||||
l->set_level(spdlog::level::debug);
|
||||
l->debug("Test stderr_color_st");
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("stderr_color_mt", "[stderr]") {
|
||||
@@ -85,5 +80,4 @@ TEST_CASE("stderr_color_mt", "[stderr]") {
|
||||
l->warn("Test stderr_color_mt");
|
||||
l->error("Test stderr_color_mt");
|
||||
l->critical("Test stderr_color_mt");
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
@@ -31,5 +31,4 @@ TEST_CASE("time_point1", "[time_point log_msg]") {
|
||||
REQUIRE(lines[4] == lines[5]);
|
||||
REQUIRE(lines[6] == lines[7]);
|
||||
REQUIRE(lines[8] != lines[9]);
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
@@ -8,7 +8,6 @@
|
||||
#endif
|
||||
|
||||
void prepare_logdir() {
|
||||
spdlog::drop_all();
|
||||
#ifdef _WIN32
|
||||
system("rmdir /S /Q test_logs");
|
||||
#else
|
||||
|
@@ -1,8 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
#include <filesystem>
|
||||
#include <string>
|
||||
|
||||
std::size_t count_files(const std::string &folder);
|
||||
|
||||
@@ -10,7 +10,7 @@ void prepare_logdir();
|
||||
|
||||
std::string file_contents(const std::string &filename);
|
||||
|
||||
//std::size_t count_lines(const std::string &filename);
|
||||
// std::size_t count_lines(const std::string &filename);
|
||||
std::size_t count_lines(const std::filesystem::path &filename);
|
||||
|
||||
void require_message_count(const std::filesystem::path &filename, const std::size_t messages);
|
||||
|
Reference in New Issue
Block a user