diff options
Diffstat (limited to 'src/Log.h')
-rw-r--r-- | src/Log.h | 18 |
1 files changed, 10 insertions, 8 deletions
@@ -3,10 +3,10 @@ Her Majesty the Queen in Right of Canada (Communications Research Center Canada) - Copyright (C) 2016 + Copyright (C) 2018 Matthias P. Braendli, matthias.braendli@mpb.li - http://opendigitalradio.org + http://www.opendigitalradio.org */ /* This file is part of ODR-DabMod. @@ -42,6 +42,7 @@ #include <string> #include <map> #include <mutex> +#include <memory> #include <thread> #include "ThreadsafeQueue.h" @@ -56,6 +57,7 @@ static const std::string levels_as_str[] = /** Abstract class all backends must inherit from */ class LogBackend { public: + virtual ~LogBackend() {}; virtual void log(log_level_t level, const std::string& message) = 0; virtual std::string get_name() const = 0; }; @@ -67,7 +69,7 @@ class LogToSyslog : public LogBackend { openlog(SYSLOG_IDENT, LOG_PID, SYSLOG_FACILITY); } - ~LogToSyslog() { + virtual ~LogToSyslog() { closelog(); } @@ -117,9 +119,9 @@ class LogTracer : public LogBackend { class LogLine; struct log_message_t { - log_message_t(log_level_t _level, const std::string& _message) : + log_message_t(log_level_t _level, std::string&& _message) : level(_level), - message(_message) {} + message(move(_message)) {} log_message_t() : level(debug), @@ -142,12 +144,12 @@ class Logger { m_io_thread.join(); } - void register_backend(LogBackend* backend); + void register_backend(std::shared_ptr<LogBackend> backend); /* Log the message to all backends */ void log(log_level_t level, const char* fmt, ...); - void logstr(log_level_t level, std::string message); + void logstr(log_level_t level, std::string&& message); /* All logging IO is done in another thread */ void io_process(void); @@ -157,7 +159,7 @@ class Logger { LogLine level(log_level_t level); private: - std::list<LogBackend*> backends; + std::list<std::shared_ptr<LogBackend> > backends; ThreadsafeQueue<log_message_t> m_message_queue; std::thread m_io_thread; |