|
|
@ -53,16 +53,24 @@ public:
|
|
|
|
throw_if_exists(logger_name);
|
|
|
|
throw_if_exists(logger_name);
|
|
|
|
std::shared_ptr<logger> new_logger;
|
|
|
|
std::shared_ptr<logger> new_logger;
|
|
|
|
if (_async_mode)
|
|
|
|
if (_async_mode)
|
|
|
|
|
|
|
|
{
|
|
|
|
new_logger = std::make_shared<async_logger>(logger_name, sinks_begin, sinks_end, _async_q_size, _overflow_policy,
|
|
|
|
new_logger = std::make_shared<async_logger>(logger_name, sinks_begin, sinks_end, _async_q_size, _overflow_policy,
|
|
|
|
_worker_warmup_cb, _flush_interval_ms, _worker_teardown_cb);
|
|
|
|
_worker_warmup_cb, _flush_interval_ms, _worker_teardown_cb);
|
|
|
|
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
new_logger = std::make_shared<logger>(logger_name, sinks_begin, sinks_end);
|
|
|
|
new_logger = std::make_shared<logger>(logger_name, sinks_begin, sinks_end);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (_formatter)
|
|
|
|
if (_formatter)
|
|
|
|
|
|
|
|
{
|
|
|
|
new_logger->set_formatter(_formatter);
|
|
|
|
new_logger->set_formatter(_formatter);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (_err_handler)
|
|
|
|
if (_err_handler)
|
|
|
|
|
|
|
|
{
|
|
|
|
new_logger->set_error_handler(_err_handler);
|
|
|
|
new_logger->set_error_handler(_err_handler);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
new_logger->set_level(_level);
|
|
|
|
new_logger->set_level(_level);
|
|
|
|
new_logger->flush_on(_flush_level);
|
|
|
|
new_logger->flush_on(_flush_level);
|
|
|
@ -84,10 +92,14 @@ public:
|
|
|
|
logger_name, sinks_begin, sinks_end, queue_size, overflow_policy, worker_warmup_cb, flush_interval_ms, worker_teardown_cb);
|
|
|
|
logger_name, sinks_begin, sinks_end, queue_size, overflow_policy, worker_warmup_cb, flush_interval_ms, worker_teardown_cb);
|
|
|
|
|
|
|
|
|
|
|
|
if (_formatter)
|
|
|
|
if (_formatter)
|
|
|
|
|
|
|
|
{
|
|
|
|
new_logger->set_formatter(_formatter);
|
|
|
|
new_logger->set_formatter(_formatter);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (_err_handler)
|
|
|
|
if (_err_handler)
|
|
|
|
|
|
|
|
{
|
|
|
|
new_logger->set_error_handler(_err_handler);
|
|
|
|
new_logger->set_error_handler(_err_handler);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
new_logger->set_level(_level);
|
|
|
|
new_logger->set_level(_level);
|
|
|
|
new_logger->flush_on(_flush_level);
|
|
|
|
new_logger->flush_on(_flush_level);
|
|
|
@ -101,8 +113,10 @@ public:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
std::lock_guard<Mutex> lock(_mutex);
|
|
|
|
std::lock_guard<Mutex> lock(_mutex);
|
|
|
|
for (auto &l : _loggers)
|
|
|
|
for (auto &l : _loggers)
|
|
|
|
|
|
|
|
{
|
|
|
|
fun(l.second);
|
|
|
|
fun(l.second);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void drop(const std::string &logger_name)
|
|
|
|
void drop(const std::string &logger_name)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -146,22 +160,28 @@ public:
|
|
|
|
std::lock_guard<Mutex> lock(_mutex);
|
|
|
|
std::lock_guard<Mutex> lock(_mutex);
|
|
|
|
_formatter = f;
|
|
|
|
_formatter = f;
|
|
|
|
for (auto &l : _loggers)
|
|
|
|
for (auto &l : _loggers)
|
|
|
|
|
|
|
|
{
|
|
|
|
l.second->set_formatter(_formatter);
|
|
|
|
l.second->set_formatter(_formatter);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void set_pattern(const std::string &pattern)
|
|
|
|
void set_pattern(const std::string &pattern)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
std::lock_guard<Mutex> lock(_mutex);
|
|
|
|
std::lock_guard<Mutex> lock(_mutex);
|
|
|
|
_formatter = std::make_shared<pattern_formatter>(pattern);
|
|
|
|
_formatter = std::make_shared<pattern_formatter>(pattern);
|
|
|
|
for (auto &l : _loggers)
|
|
|
|
for (auto &l : _loggers)
|
|
|
|
|
|
|
|
{
|
|
|
|
l.second->set_formatter(_formatter);
|
|
|
|
l.second->set_formatter(_formatter);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void set_level(level::level_enum log_level)
|
|
|
|
void set_level(level::level_enum log_level)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
std::lock_guard<Mutex> lock(_mutex);
|
|
|
|
std::lock_guard<Mutex> lock(_mutex);
|
|
|
|
for (auto &l : _loggers)
|
|
|
|
for (auto &l : _loggers)
|
|
|
|
|
|
|
|
{
|
|
|
|
l.second->set_level(log_level);
|
|
|
|
l.second->set_level(log_level);
|
|
|
|
|
|
|
|
}
|
|
|
|
_level = log_level;
|
|
|
|
_level = log_level;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -169,14 +189,18 @@ public:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
std::lock_guard<Mutex> lock(_mutex);
|
|
|
|
std::lock_guard<Mutex> lock(_mutex);
|
|
|
|
for (auto &l : _loggers)
|
|
|
|
for (auto &l : _loggers)
|
|
|
|
|
|
|
|
{
|
|
|
|
l.second->flush_on(log_level);
|
|
|
|
l.second->flush_on(log_level);
|
|
|
|
|
|
|
|
}
|
|
|
|
_flush_level = log_level;
|
|
|
|
_flush_level = log_level;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void set_error_handler(log_err_handler handler)
|
|
|
|
void set_error_handler(log_err_handler handler)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
for (auto &l : _loggers)
|
|
|
|
for (auto &l : _loggers)
|
|
|
|
|
|
|
|
{
|
|
|
|
l.second->set_error_handler(handler);
|
|
|
|
l.second->set_error_handler(handler);
|
|
|
|
|
|
|
|
}
|
|
|
|
_err_handler = handler;
|
|
|
|
_err_handler = handler;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -210,8 +234,10 @@ private:
|
|
|
|
void throw_if_exists(const std::string &logger_name)
|
|
|
|
void throw_if_exists(const std::string &logger_name)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (_loggers.find(logger_name) != _loggers.end())
|
|
|
|
if (_loggers.find(logger_name) != _loggers.end())
|
|
|
|
|
|
|
|
{
|
|
|
|
throw spdlog_ex("logger with name '" + logger_name + "' already exists");
|
|
|
|
throw spdlog_ex("logger with name '" + logger_name + "' already exists");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Mutex _mutex;
|
|
|
|
Mutex _mutex;
|
|
|
|
std::unordered_map<std::string, std::shared_ptr<logger>> _loggers;
|
|
|
|
std::unordered_map<std::string, std::shared_ptr<logger>> _loggers;
|
|
|
|