From 35060923d93371ae30d007f629eeeb8dfaffe437 Mon Sep 17 00:00:00 2001 From: gabime Date: Sat, 18 Jan 2025 13:42:55 +0200 Subject: [PATCH] improved err_helper message while catching exceptions --- src/details/err_helper.cpp | 4 ++-- tests/test_errors.cpp | 38 +++++++++++++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/details/err_helper.cpp b/src/details/err_helper.cpp index 8b867098..cd15aa59 100644 --- a/src/details/err_helper.cpp +++ b/src/details/err_helper.cpp @@ -46,10 +46,10 @@ void err_helper::handle_ex(const std::string &origin, const source_loc &loc, con } std::fputs(msg.c_str(), stderr); } catch (const std::exception &handler_ex) { - std::fprintf(stderr, "[*** LOG ERROR ***] [%s] caught exception during error handler: %s\n", origin.c_str(), + std::fprintf(stderr, "[*** LOG ERROR ***] [%s] exception during %s handler: %s\n", origin.c_str(), custom_err_handler_ ? "custom" : "default", handler_ex.what()); } catch (...) { // catch all exceptions - std::fprintf(stderr, "[*** LOG ERROR ***] [%s] caught unknown exception during error handler\n", origin.c_str()); + std::fprintf(stderr, "[*** LOG ERROR ***] [%s] unknown exception during %s handler\n", origin.c_str(), custom_err_handler_ ? "custom" : "default"); } } diff --git a/tests/test_errors.cpp b/tests/test_errors.cpp index 602c6372..53ec5186 100644 --- a/tests/test_errors.cpp +++ b/tests/test_errors.cpp @@ -21,7 +21,7 @@ struct custom_ex {}; using namespace spdlog::sinks; TEST_CASE("default_error_handler", "[errors]") { prepare_logdir(); - auto logger = spdlog::create("test-error", log_filename); + auto logger = spdlog::create("test-bad-format", log_filename); logger->set_pattern("%v"); logger->info(SPDLOG_FMT_RUNTIME("Test message {} {}"), 1); logger->info("Test message {}", 2); @@ -42,8 +42,36 @@ TEST_CASE("custom_error_handler", "[errors]") { require_message_count(log_filename, 2); } -TEST_CASE("default_error_handler2", "[errors]") { - auto logger = std::make_shared("test-failing-sink", std::make_shared()); +TEST_CASE("throwing_sink", "[errors]") { + auto logger = std::make_shared("test-throwing-sink", std::make_shared()); + REQUIRE_NOTHROW(logger->info("Some message")); +} + +TEST_CASE("throwing_flush", "[errors]") { + auto logger = spdlog::create("test-throwing-sink"); + REQUIRE_NOTHROW(logger->flush()); +} + +TEST_CASE("throwing_error_handler", "[errors]") { + auto logger = std::make_shared("test-throwing-error-handler", std::make_shared()); + logger->set_error_handler([=](const std::string &msg) { + REQUIRE(msg == log_err_msg); + throw std::runtime_error("test throw"); + }); + REQUIRE_NOTHROW(logger->info("Some message")); +} + +TEST_CASE("throwing_flush_error_handler", "[errors]") { + auto logger = spdlog::create("test-throwing-error-handler"); + logger->set_error_handler([=](const std::string &msg) { + REQUIRE(msg == flush_err_msg); + throw std::runtime_error("test throw"); + }); + REQUIRE_NOTHROW(logger->flush()); +} + +TEST_CASE("unknown_ex_from_err_handler", "[errors]") { + auto logger = std::make_shared("test-throwing-error-handler", std::make_shared()); logger->set_error_handler([=](const std::string &msg) { REQUIRE(msg == log_err_msg); throw custom_ex(); @@ -51,8 +79,8 @@ TEST_CASE("default_error_handler2", "[errors]") { REQUIRE_NOTHROW(logger->info("Some message")); } -TEST_CASE("flush_error_handler", "[errors]") { - auto logger = spdlog::create("test-failing-sink"); +TEST_CASE("unknown_ex_from_flush_err_handler", "[errors]") { + auto logger = spdlog::create("test-throwing-error-handler"); logger->set_error_handler([=](const std::string &msg) { REQUIRE(msg == flush_err_msg); throw custom_ex();