diff --git a/example/example.cpp b/example/example.cpp index df89ae56..bf3728f8 100644 --- a/example/example.cpp +++ b/example/example.cpp @@ -21,6 +21,7 @@ void user_defined_example(); void err_handler_example(); void syslog_example(); void clone_example(); +void default_logger_example(); #define SPDLOG_TRACE_ON #define SPDLOG_DEBUG_ON @@ -53,6 +54,10 @@ int main(int, char *[]) rotating_example(); daily_example(); clone_example(); + + default_logger_example(); + + // async logging using a backing thread pool async_example(); binary_example(); multi_sink_example(); @@ -119,6 +124,13 @@ void clone_example() network_logger->info("Logging network stuff.."); } +void default_logger_example() +{ + auto logger = spdlog::get("console"); + spdlog::set_default(logger); + spdlog::get_default()->warn("Default logger message..."); +} + #include "spdlog/async.h" void async_example() { diff --git a/include/spdlog/details/registry.h b/include/spdlog/details/registry.h index 053ac923..e000a976 100644 --- a/include/spdlog/details/registry.h +++ b/include/spdlog/details/registry.h @@ -99,6 +99,16 @@ public: tp_ = std::move(tp); } + void set_default(std::shared_ptr logger) + { + default_logger_ = std::move(logger); + } + + std::shared_ptr get_default() + { + return default_logger_; + } + std::shared_ptr get_tp() { std::lock_guard lock(tp_mutex_); @@ -244,6 +254,7 @@ private: std::mutex logger_map_mutex_, flusher_mutex_; std::recursive_mutex tp_mutex_; std::unordered_map> loggers_; + std::shared_ptr default_logger_; std::unique_ptr formatter_; level::level_enum level_ = level::info; level::level_enum flush_level_ = level::off; diff --git a/include/spdlog/spdlog.h b/include/spdlog/spdlog.h index 3158909a..0cf3f1ba 100644 --- a/include/spdlog/spdlog.h +++ b/include/spdlog/spdlog.h @@ -56,6 +56,23 @@ inline std::shared_ptr get(const std::string &name) return details::registry::instance().get(name); } +// Return default logger instance when no explicitly defined +// example: spdlog::get_default()->info("hello {}", "world"); +inline std::shared_ptr get_default() +{ + return details::registry::instance().get_default(); +} + +// Sets logger passed in parameter as default logger that will be returned +// when calling get_default() function +// example: +// auto logger = spdlog::create("logger_name", "dailylog_filename", 11, 59); +// spdlog::set_default(logger); +inline void set_default(std::shared_ptr logger) +{ + details::registry::instance().set_default(std::move(logger)); +} + // Set global formatter. Each sink in each logger will get a clone of this object inline void set_formatter(std::unique_ptr formatter) {