Commit 11472edd authored by gabime's avatar gabime

Catch sink exceptions without affecting other sinks

parent 12470f62
...@@ -65,14 +65,7 @@ SPDLOG_INLINE void spdlog::async_logger::backend_log_(const details::log_msg &in ...@@ -65,14 +65,7 @@ SPDLOG_INLINE void spdlog::async_logger::backend_log_(const details::log_msg &in
} }
} }
} }
catch (const std::exception &ex) SPDLOG_LOGGER_CATCH()
{
err_handler_(ex.what());
}
catch (...)
{
err_handler_("Unknown exception in logger");
}
if (should_flush_(incoming_log_msg)) if (should_flush_(incoming_log_msg))
{ {
...@@ -89,14 +82,7 @@ SPDLOG_INLINE void spdlog::async_logger::backend_flush_() ...@@ -89,14 +82,7 @@ SPDLOG_INLINE void spdlog::async_logger::backend_flush_()
sink->flush(); sink->flush();
} }
} }
catch (const std::exception &ex) SPDLOG_LOGGER_CATCH()
{
err_handler_(ex.what());
}
catch (...)
{
err_handler_("Unknown exception in logger");
}
} }
SPDLOG_INLINE std::shared_ptr<spdlog::logger> spdlog::async_logger::clone(std::string new_name) SPDLOG_INLINE std::shared_ptr<spdlog::logger> spdlog::async_logger::clone(std::string new_name)
......
...@@ -65,19 +65,8 @@ SPDLOG_INLINE void logger::log(source_loc loc, level::level_enum lvl, string_vie ...@@ -65,19 +65,8 @@ SPDLOG_INLINE void logger::log(source_loc loc, level::level_enum lvl, string_vie
return; return;
} }
try details::log_msg log_msg(loc, string_view_t(name_), lvl, msg);
{ sink_it_(log_msg);
details::log_msg log_msg(loc, string_view_t(name_), lvl, msg);
sink_it_(log_msg);
}
catch (const std::exception &ex)
{
err_handler_(ex.what());
}
catch (...)
{
err_handler_("Unknown exception in logger");
}
} }
SPDLOG_INLINE void logger::log(level::level_enum lvl, string_view_t msg) SPDLOG_INLINE void logger::log(level::level_enum lvl, string_view_t msg)
...@@ -137,18 +126,7 @@ SPDLOG_INLINE void logger::set_pattern(std::string pattern, pattern_time_type ti ...@@ -137,18 +126,7 @@ SPDLOG_INLINE void logger::set_pattern(std::string pattern, pattern_time_type ti
// flush functions // flush functions
SPDLOG_INLINE void logger::flush() SPDLOG_INLINE void logger::flush()
{ {
try flush_();
{
flush_();
}
catch (const std::exception &ex)
{
err_handler_(ex.what());
}
catch (...)
{
err_handler_("Unknown exception in logger");
}
} }
SPDLOG_INLINE void logger::flush_on(level::level_enum log_level) SPDLOG_INLINE void logger::flush_on(level::level_enum log_level)
...@@ -193,7 +171,11 @@ SPDLOG_INLINE void logger::sink_it_(details::log_msg &msg) ...@@ -193,7 +171,11 @@ SPDLOG_INLINE void logger::sink_it_(details::log_msg &msg)
{ {
if (sink->should_log(msg.level)) if (sink->should_log(msg.level))
{ {
sink->log(msg); try
{
sink->log(msg);
}
SPDLOG_LOGGER_CATCH()
} }
} }
...@@ -207,7 +189,11 @@ SPDLOG_INLINE void logger::flush_() ...@@ -207,7 +189,11 @@ SPDLOG_INLINE void logger::flush_()
{ {
for (auto &sink : sinks_) for (auto &sink : sinks_)
{ {
sink->flush(); try
{
sink->flush();
}
SPDLOG_LOGGER_CATCH()
} }
} }
......
...@@ -27,6 +27,10 @@ ...@@ -27,6 +27,10 @@
#include <vector> #include <vector>
#include <functional> #include <functional>
#define SPDLOG_LOGGER_CATCH() \
catch (const std::exception &ex) { err_handler_(ex.what());} \
catch (...) {err_handler_("Unknown exception in logger");}
namespace spdlog { namespace spdlog {
class logger class logger
{ {
...@@ -72,14 +76,7 @@ public: ...@@ -72,14 +76,7 @@ public:
details::log_msg log_msg(loc, name_, lvl, string_view_t(buf.data(), buf.size())); details::log_msg log_msg(loc, name_, lvl, string_view_t(buf.data(), buf.size()));
sink_it_(log_msg); sink_it_(log_msg);
} }
catch (const std::exception &ex) SPDLOG_LOGGER_CATCH()
{
err_handler_(ex.what());
}
catch (...)
{
err_handler_("Unknown exception in logger");
}
} }
template<typename... Args> template<typename... Args>
...@@ -150,19 +147,9 @@ public: ...@@ -150,19 +147,9 @@ public:
{ {
return; return;
} }
try
{ details::log_msg log_msg(loc, name_, lvl, msg);
details::log_msg log_msg(loc, name_, lvl, msg); sink_it_(log_msg);
sink_it_(log_msg);
}
catch (const std::exception &ex)
{
err_handler_(ex.what());
}
catch (...)
{
err_handler_("Unknown exception in logger");
}
} }
// T cannot be statically converted to string_view // T cannot be statically converted to string_view
...@@ -180,14 +167,7 @@ public: ...@@ -180,14 +167,7 @@ public:
details::log_msg log_msg(loc, name_, lvl, string_view_t(buf.data(), buf.size())); details::log_msg log_msg(loc, name_, lvl, string_view_t(buf.data(), buf.size()));
sink_it_(log_msg); sink_it_(log_msg);
} }
catch (const std::exception &ex) SPDLOG_LOGGER_CATCH()
{
err_handler_(ex.what());
}
catch (...)
{
err_handler_("Unknown exception in logger");
}
} }
template<typename T> template<typename T>
...@@ -250,14 +230,7 @@ public: ...@@ -250,14 +230,7 @@ public:
details::log_msg log_msg(source, name_, lvl, string_view_t(buf.data(), buf.size())); details::log_msg log_msg(source, name_, lvl, string_view_t(buf.data(), buf.size()));
sink_it_(log_msg); sink_it_(log_msg);
} }
catch (const std::exception &ex) SPDLOG_LOGGER_CATCH()
{
err_handler_(ex.what());
}
catch (...)
{
err_handler_("Unknown exception in logger");
}
} }
template<typename... Args> template<typename... Args>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment