Added optional default logger setup possibility

User can now add default logger passed to set_default function and then use it across code base by just calling get_default function. This helps to avoid common typos when accessing logger via get function.
pull/867/head
rlewicki 7 years ago
parent 10e809cf64
commit 805aafe338

@ -20,6 +20,7 @@ void user_defined_example();
void err_handler_example(); void err_handler_example();
void syslog_example(); void syslog_example();
void clone_example(); void clone_example();
void default_logger_example();
#include "spdlog/spdlog.h" #include "spdlog/spdlog.h"
@ -38,6 +39,8 @@ int main(int, char *[])
clone_example(); clone_example();
default_logger_example();
// async logging using a backing thread pool // async logging using a backing thread pool
async_example(); async_example();
@ -138,6 +141,13 @@ void clone_example()
network_logger->info("Logging network stuff.."); 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" #include "spdlog/async.h"
void async_example() void async_example()
{ {

@ -72,6 +72,16 @@ public:
tp_ = std::move(tp); tp_ = std::move(tp);
} }
void set_default(std::shared_ptr<logger> logger)
{
default_logger_ = std::move(logger);
}
std::shared_ptr<logger> get_default()
{
return default_logger_;
}
std::shared_ptr<thread_pool> get_tp() std::shared_ptr<thread_pool> get_tp()
{ {
std::lock_guard<std::recursive_mutex> lock(tp_mutex_); std::lock_guard<std::recursive_mutex> lock(tp_mutex_);
@ -202,6 +212,7 @@ private:
std::mutex logger_map_mutex_, flusher_mutex_; std::mutex logger_map_mutex_, flusher_mutex_;
std::recursive_mutex tp_mutex_; std::recursive_mutex tp_mutex_;
std::unordered_map<std::string, std::shared_ptr<logger>> loggers_; std::unordered_map<std::string, std::shared_ptr<logger>> loggers_;
std::shared_ptr<logger> default_logger_;
std::unique_ptr<formatter> formatter_; std::unique_ptr<formatter> formatter_;
level::level_enum level_ = level::info; level::level_enum level_ = level::info;
level::level_enum flush_level_ = level::off; level::level_enum flush_level_ = level::off;

@ -54,6 +54,23 @@ inline std::shared_ptr<logger> get(const std::string &name)
return details::registry::instance().get(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<logger> 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<daily_file_sink_st>("logger_name", "dailylog_filename", 11, 59);
// spdlog::set_default(logger);
inline void set_default(std::shared_ptr<logger> logger)
{
details::registry::instance().set_default(std::move(logger));
}
// Set global formatter. Each sink in each logger will get a clone of this object // Set global formatter. Each sink in each logger will get a clone of this object
inline void set_formatter(std::unique_ptr<spdlog::formatter> formatter) inline void set_formatter(std::unique_ptr<spdlog::formatter> formatter)
{ {

Loading…
Cancel
Save