Commit 650486a0 authored by gabi's avatar gabi

removed the use of str() in when building the log to improve perf even more

parent 41db9955
......@@ -17,16 +17,16 @@ using namespace utils;
int main(int argc, char* argv[])
{
const unsigned int howmany = argc <= 1 ? 1000000 : atoi(argv[1]);
const unsigned int howmany = argc <= 1 ? 500000 : atoi(argv[1]);
//std::string pattern = "%Y:%m:%d %H:%M:%S.%e ---> [%n:%l] %t";
//auto formatter = std::make_shared<details::pattern_formatter>(pattern);
logger cout_logger("bench", { std::make_shared<sinks::stderr_sink_mt>() });
cout_logger.info() << "Hello logger " << std::setw(10) << std::setfill('x') << 1234.55;
cout_logger.info() << "Hello logger " << 1234;
auto nullsink = std::make_shared<sinks::null_sink_st>();
auto rotating = std::make_shared<sinks::rotating_file_sink_mt>("myrotating", "txt", 1024 * 1024 * 5, 5, 100);
//auto rotating = std::make_shared<sinks::rotating_file_sink_mt>("myrotating", "txt", 1024 * 1024 * 5, 5, 100);
logger my_logger("my_logger", { nullsink });
......
......@@ -34,11 +34,10 @@ public:
other.clear();
}
stackbuf_t::bufpair_t buf() const
const stackbuf_t& buf() const
{
return _stackbuf.get();
return _stackbuf;
}
std::size_t size() const
{
return _stackbuf.size();
......@@ -91,7 +90,13 @@ public:
std::string str()
{
auto buf = _dev.buf();
return std::string(buf.first, buf.second);
const char*data = buf.data();
return std::string(data, data+buf.size());
}
const stack_devicebuf::stackbuf_t& buf() const
{
return _dev.buf();
}
......@@ -111,22 +116,27 @@ public:
void putc(char c)
{
_dev.sputc(c);
this->width(4);
}
// put int and pad with zeroes if smalled than min_width
void put_int(int n, int padding)
void write_int(int n, int padding)
{
std::string s;
details::fast_itostr(n, s, padding);
_dev.sputn(s.data(), s.size());
}
void put_str(const std::string& s)
void write_str(const std::string& s)
{
_dev.sputn(s.data(), s.size());
}
void write_fast_oss(const fast_oss& oss)
{
auto buf = oss.buf();
_dev.sputn(buf.data(), buf.size());
}
private:
stack_devicebuf _dev;
......
......@@ -16,9 +16,10 @@ public:
file_flush_helper(const file_flush_helper&) = delete;
void write(const std::string& msg, std::ofstream& ofs)
void write(const log_msg msg, std::ofstream& ofs)
{
ofs.write(msg.data(), msg.size());
auto buf = msg.formatted.buf();
ofs.write(buf.data(), buf.size());
if(--_flush_countdown == 0)
{
ofs.flush();
......
......@@ -19,7 +19,6 @@ public:
line_logger(logger* callback_logger, level::level_enum msg_level, bool enabled):
_callback_logger(callback_logger),
_log_msg(msg_level),
_oss(),
_enabled(enabled)
{}
......@@ -32,7 +31,6 @@ public:
line_logger(line_logger&& other) :
_callback_logger(other._callback_logger),
_log_msg(std::move(other._log_msg)),
_oss(std::move(other._oss)),
_enabled(other._enabled)
{
other.disable();
......@@ -46,7 +44,6 @@ public:
_log_msg.logger_name = _callback_logger->name();
_log_msg.time = log_clock::now();
_log_msg.tm_time = details::os::localtime(log_clock::to_time_t(_log_msg.time));
_log_msg.raw = _oss.str();
_callback_logger->_log_msg(_log_msg);
}
}
......@@ -56,7 +53,7 @@ public:
{
if (_enabled)
{
_oss << what;
_log_msg.raw << what;
}
}
......@@ -77,7 +74,6 @@ public:
private:
logger* _callback_logger;
log_msg _log_msg;
details::fast_oss _oss;
bool _enabled;
};
} //Namespace details
......
#pragma once
#include <chrono>
#include "../common.h"
#include "fast_oss.h"
namespace c11log
{
......@@ -38,8 +38,8 @@ struct log_msg
swap(l.level, r.level);
swap(l.time, r.time);
swap(l.tm_time, r.tm_time);
swap(l.raw, r.raw);
swap(l.formatted, r.formatted);
//swap(l.raw, r.raw);
//swap(l.formatted, r.formatted);
}
......@@ -60,8 +60,8 @@ struct log_msg
level::level_enum level;
log_clock::time_point time;
std::tm tm_time;
std::string raw;
std::string formatted;
fast_oss raw;
fast_oss formatted;
};
......
This diff is collapsed.
......@@ -15,8 +15,6 @@ template<unsigned short STACK_SIZE>
class stack_buf
{
public:
using bufpair_t = std::pair<const char*, std::size_t>;
using iterator = char const*;
static const unsigned short stack_size = STACK_SIZE;
stack_buf() :_v(), _stack_size(0) {}
~stack_buf() = default;
......@@ -63,28 +61,28 @@ public:
_v.clear();
}
bufpair_t get() const
/* bufpair_t get() const
{
if (vector_used())
return bufpair_t(_v.data(), _v.size());
else
return bufpair_t(_stack_array.data(), _stack_size);
}*/
const char* data() const
{
if (vector_used())
return bufpair_t(_v.data(), _v.size());
return _v.data();
else
return bufpair_t(_stack_array.data(), _stack_size);
}
iterator begin() const
{
return get().first;
}
iterator end() const
{
bufpair_t bpair = get();
return bpair.first + bpair.second;
return _stack_array.data();
}
std::size_t size() const
{
return get().second;
if (vector_used())
return _v.size();
else
return _stack_size;
}
private:
......
......@@ -5,7 +5,7 @@
// Upon each log write the logger:
// 1. Checks if its log level is enough to log the message
// 2. Format the message using the formatter function
// 3. Pass the formatted message to it sinks to performa the actual logging
// 3. Pass the formatted message to its sinks to performa the actual logging
#include<vector>
#include<memory>
......@@ -68,8 +68,6 @@ private:
void _log_msg(details::log_msg& msg);
formatter_ptr _default_formatter();
const char* _default_pattern = "[%Y:%m:%d %H:%M:%S.%e] [%n:%l] %t";
};
}
......@@ -183,7 +181,6 @@ inline c11log::logger::formatter_ptr c11log::logger::formatter() const
}
inline void c11log::logger::_variadic_log(c11log::details::line_logger&) {}
template <typename First, typename... Rest>
......
......@@ -67,7 +67,7 @@ inline c11log::sinks::async_sink::~async_sink()
inline void c11log::sinks::async_sink::_sink_it(const details::log_msg& msg)
{
if(!_active || msg.formatted.empty())
if(!_active)
return;
_q.push(msg);
}
......
......@@ -32,7 +32,7 @@ public:
protected:
void _sink_it(const details::log_msg& msg) override
{
_flush_helper.write(msg.formatted, _ofstream);
_flush_helper.write(msg, _ofstream);
}
private:
std::ofstream _ofstream;
......@@ -71,7 +71,7 @@ protected:
_rotate();
_current_size = msg.formatted.size();
}
_flush_helper.write(msg.formatted, _ofstream);
_flush_helper.write(msg, _ofstream);
}
......@@ -146,7 +146,7 @@ protected:
_ofstream.open(_calc_filename(_base_filename, _extension));
_midnight_tp = _calc_midnight_tp();
}
_flush_helper.write(msg.formatted, _ofstream);
_flush_helper.write(msg, _ofstream);
}
private:
......
......@@ -24,7 +24,8 @@ public:
protected:
virtual void _sink_it(const details::log_msg& msg) override
{
_ostream << msg.formatted;
auto buf = msg.formatted.buf();
_ostream.write(buf.data(), buf.size());
}
std::ostream& _ostream;
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment