diff --git a/include/spdlog/details/registry.h b/include/spdlog/details/registry.h index fd8e4be9..e86ad796 100644 --- a/include/spdlog/details/registry.h +++ b/include/spdlog/details/registry.h @@ -37,6 +37,7 @@ #include "../logger.h" #include "../async_logger.h" #include "../common.h" +#include "../sinks/null_sink.h" namespace spdlog { @@ -57,7 +58,7 @@ public: { std::lock_guard lock(_mutex); auto found = _loggers.find(logger_name); - return found == _loggers.end() ? nullptr : found->second; + return found == _loggers.end() ? _default_logger : found->second; } template @@ -144,6 +145,12 @@ public: _async_mode = false; } + void set_default_logger(std::shared_ptr default_logger) + { + std::lock_guard lock(_mutex); + _default_logger = default_logger; + } + static registry_t& instance() { static registry_t s_instance; @@ -158,7 +165,10 @@ private: throw spdlog_ex("logger with name " + logger_name + " already exists"); _loggers[logger->name()] = logger; } - registry_t(){} + registry_t() + { + _default_logger = std::make_shared("null", std::make_shared>()); + } registry_t(const registry_t&) = delete; registry_t& operator=(const registry_t&) = delete; Mutex _mutex; @@ -170,6 +180,7 @@ private: async_overflow_policy _overflow_policy = async_overflow_policy::block_retry; std::function _worker_warmup_cb = nullptr; std::chrono::milliseconds _flush_interval_ms; + std::shared_ptr _default_logger; }; #ifdef SPDLOG_NO_REGISTRY_MUTEX typedef registry_t registry; diff --git a/include/spdlog/details/spdlog_impl.h b/include/spdlog/details/spdlog_impl.h index cfd6f826..10eb665d 100644 --- a/include/spdlog/details/spdlog_impl.h +++ b/include/spdlog/details/spdlog_impl.h @@ -147,6 +147,11 @@ inline void spdlog::set_sync_mode() details::registry::instance().set_sync_mode(); } +inline void spdlog::set_default_logger(std::shared_ptr logger) +{ + details::registry::instance().set_default_logger(logger); +} + inline void spdlog::drop_all() { details::registry::instance().drop_all(); diff --git a/include/spdlog/spdlog.h b/include/spdlog/spdlog.h index 5cec5623..32daedeb 100644 --- a/include/spdlog/spdlog.h +++ b/include/spdlog/spdlog.h @@ -73,6 +73,12 @@ void set_async_mode(size_t queue_size, const async_overflow_policy overflow_poli // Turn off async mode void set_sync_mode(); +// +// Set default logger +// Current default use a null sink +// +void set_default_logger(std::shared_ptr logger); + // // Create and register multi/single threaded rotating file logger //