mirror of
https://github.com/gabime/spdlog.git
synced 2024-12-26 18:41:35 +08:00
Catch sink exceptions without affecting other sinks
This commit is contained in:
parent
12470f6221
commit
11472eddbc
@ -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_()
|
|||||||
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,20 +65,9 @@ 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);
|
details::log_msg log_msg(loc, string_view_t(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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
@ -136,20 +125,9 @@ 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)
|
||||||
{
|
{
|
||||||
@ -192,9 +170,13 @@ SPDLOG_INLINE void logger::sink_it_(details::log_msg &msg)
|
|||||||
for (auto &sink : sinks_)
|
for (auto &sink : sinks_)
|
||||||
{
|
{
|
||||||
if (sink->should_log(msg.level))
|
if (sink->should_log(msg.level))
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
sink->log(msg);
|
sink->log(msg);
|
||||||
}
|
}
|
||||||
|
SPDLOG_LOGGER_CATCH()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (should_flush_(msg))
|
if (should_flush_(msg))
|
||||||
@ -206,9 +188,13 @@ SPDLOG_INLINE void logger::sink_it_(details::log_msg &msg)
|
|||||||
SPDLOG_INLINE void logger::flush_()
|
SPDLOG_INLINE void logger::flush_()
|
||||||
{
|
{
|
||||||
for (auto &sink : sinks_)
|
for (auto &sink : sinks_)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
sink->flush();
|
sink->flush();
|
||||||
}
|
}
|
||||||
|
SPDLOG_LOGGER_CATCH()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SPDLOG_INLINE bool logger::should_flush_(const details::log_msg &msg)
|
SPDLOG_INLINE bool logger::should_flush_(const details::log_msg &msg)
|
||||||
|
@ -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:
|
|||||||
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,20 +147,10 @@ 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
|
||||||
template<class T, typename std::enable_if<!std::is_convertible<T, spdlog::string_view_t>::value, T>::type * = nullptr>
|
template<class T, typename std::enable_if<!std::is_convertible<T, spdlog::string_view_t>::value, T>::type * = nullptr>
|
||||||
@ -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:
|
|||||||
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>
|
||||||
|
Loading…
Reference in New Issue
Block a user