#include "matador/logger/log_manager.hpp" namespace matador::logger { log_level_range log_manager::default_log_level_range_ = {}; logger log_manager::create_logger(std::string source) const { return logger(std::move(source), default_log_domain_); } logger log_manager::create_logger(std::string source, const std::string &domain_name) { return logger(std::move(source), acquire_domain(domain_name)); } void log_manager::add_sink(sink_ptr sink) const { default_log_domain_->add_sink(std::move(sink)); } void log_manager::add_sink(sink_ptr sink, const std::string &domain_name) { const auto log_domain = acquire_domain(domain_name); log_domain->add_sink(std::move(sink)); } void log_manager::clear_all_sinks() const { default_log_domain_->clear(); } void log_manager::clear_all_sinks(const std::string &domain_name) { if (const auto it = log_domain_map_.find(domain_name); it != log_domain_map_.end()) { it->second->clear(); } } void log_manager::clear() { log_domain_map_.clear(); default_log_domain_->clear(); } void log_manager::max_default_log_level(log_level max_level) { default_log_level_range_.max_level = max_level; } log_level log_manager::max_default_log_level() { return default_log_level_range_.max_level; } void log_manager::min_default_log_level(log_level min_level) { default_log_level_range_.min_level = min_level; } log_level log_manager::min_default_log_level() { return default_log_level_range_.min_level; } std::shared_ptr log_manager::acquire_domain(const std::string &name) { if (name == "default") { return default_log_domain_; } auto it = log_domain_map_.find(name); if (it == log_domain_map_.end()) { it = log_domain_map_.insert(std::make_pair(name, std::make_shared(name, default_log_level_range_))).first; } return it->second; } std::shared_ptr log_manager::find_domain(const std::string &name) { if (name == "default") { return default_log_domain_; } auto it = log_domain_map_.find(name); if (it != log_domain_map_.end()) { return it->second; } return std::shared_ptr(); } void log_manager::log_default(const log_level lvl, const std::string &source, const char *message) const { default_log_domain_->log(lvl, source, message); } std::shared_ptr create_file_sink(const std::string &logfile) { return std::make_shared(logfile); } std::shared_ptr create_stderr_sink() { return std::make_shared(); } std::shared_ptr create_stdout_sink() { return std::make_shared(); } std::shared_ptr create_rotating_file_sink(const std::string &logfile, size_t max_size, size_t file_count) { return std::make_shared(logfile, max_size, file_count); } void default_min_log_level(const log_level min_lvl) { log_manager::min_default_log_level(min_lvl); } void default_max_log_level(const log_level max_lvl) { log_manager::max_default_log_level(max_lvl); } void domain_min_log_level(const std::string &name, const log_level min_lvl) { if (const auto domain = log_manager::instance().find_domain(name)) { domain->min_log_level(min_lvl); } } void domain_max_log_level(const std::string &name, const log_level max_lvl) { if (const auto domain = log_manager::instance().find_domain(name)) { domain->min_log_level(max_lvl); } } void add_log_sink(sink_ptr sink) { log_manager::instance().add_sink(std::move(sink)); } void add_log_sink(sink_ptr sink, const std::string &domain) { log_manager::instance().add_sink(std::move(sink), domain); } void clear_all_log_sinks() { log_manager::instance().clear_all_sinks(); } void clear_all_log_sinks(const std::string &domain) { log_manager::instance().clear_all_sinks(domain); } logger create_logger(std::string source) { return log_manager::instance().create_logger(std::move(source)); } logger create_logger(std::string source, const std::string &domain) { return log_manager::instance().create_logger(std::move(source), domain); } void log_default(const log_level lvl, const std::string &source, const char *message) { log_manager::instance().log_default(lvl, source, message); } }