diff options
-rw-r--r-- | src/ConfigParser.cpp | 9 | ||||
-rw-r--r-- | src/Log.cpp | 19 | ||||
-rw-r--r-- | src/Log.h | 18 |
3 files changed, 22 insertions, 24 deletions
diff --git a/src/ConfigParser.cpp b/src/ConfigParser.cpp index 350c278..c90b150 100644 --- a/src/ConfigParser.cpp +++ b/src/ConfigParser.cpp @@ -123,8 +123,7 @@ static void parse_configfile( // log parameters: if (pt.GetInteger("log.syslog", 0) == 1) { - LogToSyslog* log_syslog = new LogToSyslog(); - etiLog.register_backend(log_syslog); + etiLog.register_backend(make_shared<LogToSyslog>()); } if (pt.GetInteger("log.filelog", 0) == 1) { @@ -138,14 +137,12 @@ static void parse_configfile( throw std::runtime_error("Configuration error"); } - LogToFile* log_file = new LogToFile(logfilename); - etiLog.register_backend(log_file); + etiLog.register_backend(make_shared<LogToFile>(logfilename)); } std::string trace_filename = pt.Get("log.trace", ""); if (not trace_filename.empty()) { - LogTracer* tracer = new LogTracer(trace_filename); - etiLog.register_backend(tracer); + etiLog.register_backend(make_shared<LogTracer>(trace_filename)); } diff --git a/src/Log.cpp b/src/Log.cpp index 81f7955..15c02d0 100644 --- a/src/Log.cpp +++ b/src/Log.cpp @@ -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. @@ -26,7 +26,7 @@ */ #include <list> -#include <stdarg.h> +#include <cstdarg> #include <chrono> #include "Log.h" @@ -41,10 +41,9 @@ using namespace std; */ Logger etiLog; - -void Logger::register_backend(LogBackend* backend) { +void Logger::register_backend(std::shared_ptr<LogBackend> backend) +{ backends.push_back(backend); - //log(info, "Registered new logger " + backend->get_name()); } @@ -68,13 +67,13 @@ void Logger::log(log_level_t level, const char* fmt, ...) size *= 2; } - logstr(level, str); + logstr(level, move(str)); } -void Logger::logstr(log_level_t level, std::string message) +void Logger::logstr(log_level_t level, std::string&& message) { - log_message_t m(level, message); - m_message_queue.push(std::move(m)); + log_message_t m(level, move(message)); + m_message_queue.push(move(m)); } void Logger::io_process() @@ -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; |