Catch exceptions from async logger. Fix #2618

This commit is contained in:
gabime 2023-05-27 15:33:02 +03:00
parent 4c5ee9bb10
commit 1fba68bfe2
2 changed files with 29 additions and 13 deletions

View File

@ -25,6 +25,8 @@ SPDLOG_INLINE spdlog::async_logger::async_logger(
// send the log message to the thread pool
SPDLOG_INLINE void spdlog::async_logger::sink_it_(const details::log_msg &msg)
{
SPDLOG_TRY
{
if (auto pool_ptr = thread_pool_.lock())
{
@ -35,9 +37,13 @@ SPDLOG_INLINE void spdlog::async_logger::sink_it_(const details::log_msg &msg)
throw_spdlog_ex("async log: thread pool doesn't exist anymore");
}
}
SPDLOG_LOGGER_CATCH(msg.source)
}
// send flush request to the thread pool
SPDLOG_INLINE void spdlog::async_logger::flush_()
{
SPDLOG_TRY
{
if (auto pool_ptr = thread_pool_.lock())
{
@ -48,6 +54,8 @@ SPDLOG_INLINE void spdlog::async_logger::flush_()
throw_spdlog_ex("async flush: thread pool doesn't exist anymore");
}
}
SPDLOG_LOGGER_CATCH(source_loc())
}
//
// backend functions - called from the thread pool to do the actual job

View File

@ -185,6 +185,14 @@ TEST_CASE("to_file multi-workers", "[async]")
logger->info("Hello message #{}", j);
}
}
require_message_count(TEST_FILENAME, messages);
}
TEST_CASE("bad_tp", "[async]")
{
auto test_sink = std::make_shared<spdlog::sinks::test_sink_mt>();
std::shared_ptr<spdlog::details::thread_pool> const empty_tp;
auto logger = std::make_shared<spdlog::async_logger>("as", test_sink, empty_tp);
logger->info("Please throw an exception");
REQUIRE(test_sink->msg_counter() == 0);
}