From 4c367a4bb57e7fd2fb89ffb47eff405fc703528e Mon Sep 17 00:00:00 2001 From: gabime Date: Mon, 31 Mar 2014 01:06:46 +0300 Subject: [PATCH] line_logger fixes --- example/example.cpp | 16 ++++++++-------- include/c11log/details/line_logger.h | 16 ++++++++++------ include/c11log/details/stack_buf.h | 4 ++-- include/c11log/details/stack_oss.h | 8 ++++---- 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/example/example.cpp b/example/example.cpp index 4c0d9b39..cae764ec 100644 --- a/example/example.cpp +++ b/example/example.cpp @@ -23,19 +23,19 @@ int main(int argc, char* argv[]) logger cout_logger ("", sinks::stdout_sink()); cout_logger.info() << "Hello " << "man"; - auto fsink = std::make_shared("log", "txt", 1024*1024*50 , 5, 0); - auto fsink2 = std::make_shared("lllog", "txt", 1024*1024*50 , 5, 0); + auto fsink = std::make_shared("log", "txt", 1024*1024*50 , 5, 0); + auto nullsink = sinks::null_sink::get(); + //auto as = std::make_shared(1000); + //as->add_sink(sinks::null_sink::get()); - auto as = std::make_shared(1000); - as->add_sink(sinks::null_sink::get()); - - logger my_logger ("my_logger", as); + logger my_logger ("my_logger", nullsink); auto start = system_clock::now(); for(unsigned int i = 1; i <= howmany ; ++i) - my_logger.info() << "Hello logger: " << i; + my_logger.debug() << "Hello logger: "; - auto s = howmany - as->q().size(); + //auto s = howmany - as->q().size(); + auto s = howmany; auto delta = system_clock::now() - start; auto delta_d = duration_cast> (delta).count(); diff --git a/include/c11log/details/line_logger.h b/include/c11log/details/line_logger.h index 01e5a019..f4c7ca9c 100644 --- a/include/c11log/details/line_logger.h +++ b/include/c11log/details/line_logger.h @@ -4,9 +4,8 @@ #include "../logger.h" #include "stack_oss.h" - -// line logger class. should be used by the logger as an rvalue only. -// aggregates logging string until the end of the line and then calls the logger upon destruction +// line_logger class. +// aggregates single log line (on the stack if possibe) and calls the logger upon destruction namespace c11log { @@ -21,7 +20,8 @@ public: _callback_logger(callback_logger), _log_msg(msg_level), _oss(), - _enabled(enabled) + _enabled(enabled), + _empty(true) { if(enabled) { @@ -48,8 +48,8 @@ public: _enabled(other._enabled) {} ~line_logger() - { - if (_enabled) + { + if (!_empty) { _oss << os::eol(); _log_msg.msg_buf = _oss.buf(); @@ -61,7 +61,10 @@ public: line_logger& operator<<(const T& what) { if (_enabled) + { _oss << what; + _empty = false; + } return *this; } @@ -70,6 +73,7 @@ private: log_msg _log_msg; details::stack_oss _oss; bool _enabled; + bool _empty; }; } //Namespace details } // Namespace c11log diff --git a/include/c11log/details/stack_buf.h b/include/c11log/details/stack_buf.h index 01d9d4f2..1d2b1dbd 100644 --- a/include/c11log/details/stack_buf.h +++ b/include/c11log/details/stack_buf.h @@ -85,7 +85,7 @@ public: _v.clear(); } - bufpair_t get() + bufpair_t get() const { if(!_v.empty()) return bufpair_t(_v.data(), _v.size()); @@ -93,7 +93,7 @@ public: return bufpair_t(_stack_buf.data(), _stack_size); } - std::size_t size() + std::size_t size() const { if(!_v.empty()) return _v.size(); diff --git a/include/c11log/details/stack_oss.h b/include/c11log/details/stack_oss.h index 837ae1d3..ccb6bb2c 100644 --- a/include/c11log/details/stack_oss.h +++ b/include/c11log/details/stack_oss.h @@ -21,12 +21,12 @@ public: stack_devicebuf& operator=(const stack_devicebuf&) = delete; stack_devicebuf& operator=(stack_devicebuf&&) = delete; - bufpair_t buf() + bufpair_t buf() const { return _stackbuf.get(); } - std::size_t size() + std::size_t size() const { return _stackbuf.size(); } @@ -67,12 +67,12 @@ public: stack_oss(stack_oss&& other) = delete; stack_oss& operator=(const stack_oss& other) = delete; - bufpair_t buf() + bufpair_t buf() const { return _dev.buf(); } - std::size_t size() + std::size_t size() const { return _dev.size(); }