From 966e729bf862bec35f796e462ff6b1709e847b79 Mon Sep 17 00:00:00 2001 From: selim Date: Sun, 24 Aug 2014 23:59:41 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A4=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20lo?= =?UTF-8?q?g=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D1=84=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D1=83=D0=B5=D1=82=20=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=BA=D1=83,=20=D0=B0=20=D1=83=D0=BF=D0=B0?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D1=8B=20=D0=B8=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=B4=20=D0=BB=D0=BE=D0=B3=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B2=20=D1=84=D1=83=D0=BD=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=20=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=B5=D0=B3=D0=BE=20=D0=B2=20=D0=BE=D1=87?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B4=D1=8C,=20=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=B0=D1=82=D1=8B=D0=B2=D0=B0=D0=B5=D0=BC=D1=83=D1=8E=20?= =?UTF-8?q?=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=BC=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D0=BA=D0=BE=D0=BC.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/log_queue.h | 5 +++-- include/logger.h | 16 ++++++++++++++-- src/log_queue.cpp | 9 ++++----- src/logger.cpp | 5 +++-- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/include/log_queue.h b/include/log_queue.h index 1c8ba7a..3747559 100644 --- a/include/log_queue.h +++ b/include/log_queue.h @@ -5,6 +5,7 @@ #include #include #include +#include class log_queue { @@ -12,7 +13,7 @@ private: std::thread _worker; std::mutex _mutex; std::condition_variable _cond; - std::queue _queue; + std::queue> _queue; private: void worker_func(); @@ -20,7 +21,7 @@ private: public: log_queue(); ~log_queue(); - void add_log(const std::string& logLine); + void add_log(const std::function& logFunc); }; #endif /* LOG_QUEUE_H */ diff --git a/include/logger.h b/include/logger.h index ef6c106..c93c4af 100644 --- a/include/logger.h +++ b/include/logger.h @@ -7,20 +7,32 @@ #include #include #include +#include class logger { private: + std::atomic _enabled; std::stringstream _logLine; log_queue _queue; public: logger(); + + void set_enabled(bool enabled) + { + _enabled = enabled; + } template void log(const char* s, const Args&... args) { - _logLine.str(""); - log_internal(s, args...); + if(_enabled) + { + _queue.add_log([this, s, &args...] { + _logLine.str(""); + log_internal(s, args...); + }); + } } private: diff --git a/src/log_queue.cpp b/src/log_queue.cpp index 9132850..2ab9734 100644 --- a/src/log_queue.cpp +++ b/src/log_queue.cpp @@ -16,18 +16,17 @@ void log_queue::worker_func() { std::unique_lock lock(_mutex); _cond.wait(lock, [this] { return !_queue.empty(); }); - std::string line = _queue.front(); + std::function func = _queue.front(); _queue.pop(); lock.unlock(); - // actually logging - std::cout << line << std::endl; + func(); } } -void log_queue::add_log(const std::string& logLine) +void log_queue::add_log(const std::function& logFunc) { std::lock_guard lock(_mutex); - _queue.push(logLine); + _queue.push(logFunc); _cond.notify_one(); } \ No newline at end of file diff --git a/src/logger.cpp b/src/logger.cpp index 013f1f3..5e9adf2 100644 --- a/src/logger.cpp +++ b/src/logger.cpp @@ -4,7 +4,7 @@ logger ulog; -logger::logger() +logger::logger(): _enabled(true) { } @@ -17,6 +17,7 @@ void logger::log_internal(const char *s) _logLine << *s++; } - _queue.add_log(_logLine.str()); + // actually logging + std::cout << _logLine.str() << std::endl; }