Catch exceptions from async logger. Fix #2618

pull/2744/head
gabime 2 years ago
parent 4c5ee9bb10
commit 1fba68bfe2

@ -26,27 +26,35 @@ SPDLOG_INLINE spdlog::async_logger::async_logger(
// send the log message to the thread pool // send the log message to the thread pool
SPDLOG_INLINE void spdlog::async_logger::sink_it_(const details::log_msg &msg) SPDLOG_INLINE void spdlog::async_logger::sink_it_(const details::log_msg &msg)
{ {
if (auto pool_ptr = thread_pool_.lock()) SPDLOG_TRY
{ {
pool_ptr->post_log(shared_from_this(), msg, overflow_policy_); if (auto pool_ptr = thread_pool_.lock())
} {
else pool_ptr->post_log(shared_from_this(), msg, overflow_policy_);
{ }
throw_spdlog_ex("async log: thread pool doesn't exist anymore"); else
{
throw_spdlog_ex("async log: thread pool doesn't exist anymore");
}
} }
SPDLOG_LOGGER_CATCH(msg.source)
} }
// send flush request to the thread pool // send flush request to the thread pool
SPDLOG_INLINE void spdlog::async_logger::flush_() SPDLOG_INLINE void spdlog::async_logger::flush_()
{ {
if (auto pool_ptr = thread_pool_.lock()) SPDLOG_TRY
{ {
pool_ptr->post_flush(shared_from_this(), overflow_policy_); if (auto pool_ptr = thread_pool_.lock())
} {
else pool_ptr->post_flush(shared_from_this(), overflow_policy_);
{ }
throw_spdlog_ex("async flush: thread pool doesn't exist anymore"); else
{
throw_spdlog_ex("async flush: thread pool doesn't exist anymore");
}
} }
SPDLOG_LOGGER_CATCH(source_loc())
} }
// //

@ -185,6 +185,14 @@ TEST_CASE("to_file multi-workers", "[async]")
logger->info("Hello message #{}", j); logger->info("Hello message #{}", j);
} }
} }
require_message_count(TEST_FILENAME, messages); 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);
}

Loading…
Cancel
Save