Commit 66039c7c authored by gabi's avatar gabi

Simplified sink interface - to just accept char* and size_t

parent a9abfbb0
...@@ -97,11 +97,11 @@ public: ...@@ -97,11 +97,11 @@ public:
} }
} }
void write(const log_msg& msg) void write(const char* data, size_t size)
{ {
auto& buf = msg.formatted.buf();
size_t size = buf.size();
if(std::fwrite(buf.data(), sizeof(char), size, _fd) != size) if(std::fwrite(data, sizeof(char), size, _fd) != size)
throw spdlog_ex("Failed writing to file " + _filename); throw spdlog_ex("Failed writing to file " + _filename);
if(--_flush_countdown == 0) if(--_flush_countdown == 0)
......
...@@ -184,7 +184,8 @@ inline void spdlog::logger::_variadic_log(spdlog::details::line_logger& l, const ...@@ -184,7 +184,8 @@ inline void spdlog::logger::_variadic_log(spdlog::details::line_logger& l, const
inline void spdlog::logger::_log_msg(details::log_msg& msg) inline void spdlog::logger::_log_msg(details::log_msg& msg)
{ {
_formatter->format(msg); _formatter->format(msg);
auto buf = msg.formatted.buf();
for (auto &sink : _sinks) for (auto &sink : _sinks)
sink->log(msg); sink->sink_it(buf.data(), buf.size());
} }
...@@ -53,7 +53,8 @@ namespace sinks ...@@ -53,7 +53,8 @@ namespace sinks
class async_sink : public base_sink < details::null_mutex > class async_sink : public base_sink < details::null_mutex >
{ {
public: public:
using q_type = details::blocking_queue < details::log_msg > ; using data_type = std::pair < const char*, size_t > ;
using q_type = details::blocking_queue < data_type > ;
explicit async_sink(const q_type::size_type max_queue_size); explicit async_sink(const q_type::size_type max_queue_size);
...@@ -68,7 +69,7 @@ public: ...@@ -68,7 +69,7 @@ public:
protected: protected:
void _sink_it(const details::log_msg& msg) override; void _sink_it(const char*, size_t) override;
void _thread_loop(); void _thread_loop();
private: private:
...@@ -106,10 +107,12 @@ inline spdlog::sinks::async_sink::~async_sink() ...@@ -106,10 +107,12 @@ inline spdlog::sinks::async_sink::~async_sink()
_join(); _join();
} }
inline void spdlog::sinks::async_sink::_sink_it(const details::log_msg& msg) inline void spdlog::sinks::async_sink::_sink_it(const char* data, size_t size)
{ {
_push_sentry(); _push_sentry();
_q.push(msg); auto data_copy = new char[size];
std::memcpy(data_copy, data, size);
_q.push(data_type(data_copy, size));
} }
...@@ -120,15 +123,18 @@ inline void spdlog::sinks::async_sink::_thread_loop() ...@@ -120,15 +123,18 @@ inline void spdlog::sinks::async_sink::_thread_loop()
while (_active) while (_active)
{ {
q_type::item_type msg; q_type::item_type msg;
if (_q.pop(msg, pop_timeout)) if (!_q.pop(msg, pop_timeout))
{ continue;
if (!_active) if (!_active)
return; return;
for (auto &s : _sinks) for (auto &s : _sinks)
{ {
try try
{ {
s->log(msg); s->sink_it(msg.first, msg.second);
} }
catch (const std::exception& ex) catch (const std::exception& ex)
...@@ -141,10 +147,11 @@ inline void spdlog::sinks::async_sink::_thread_loop() ...@@ -141,10 +147,11 @@ inline void spdlog::sinks::async_sink::_thread_loop()
} }
} }
} delete[] msg.first;
} }
} }
inline void spdlog::sinks::async_sink::add_sink(spdlog::sink_ptr s) inline void spdlog::sinks::async_sink::add_sink(spdlog::sink_ptr s)
{ {
std::lock_guard<std::mutex> guard(_mutex); std::lock_guard<std::mutex> guard(_mutex);
......
...@@ -52,15 +52,15 @@ public: ...@@ -52,15 +52,15 @@ public:
base_sink(const base_sink&) = delete; base_sink(const base_sink&) = delete;
base_sink& operator=(const base_sink&) = delete; base_sink& operator=(const base_sink&) = delete;
void log(const details::log_msg& msg) override void sink_it(const char* data, size_t size) override
{ {
std::lock_guard<Mutex> lock(_mutex); std::lock_guard<Mutex> lock(_mutex);
_sink_it(msg); _sink_it(data, size);
}; };
protected: protected:
virtual void _sink_it(const details::log_msg& msg) = 0; virtual void _sink_it(const char* data, size_t size) = 0;
Mutex _mutex; Mutex _mutex;
}; };
} }
......
...@@ -52,9 +52,9 @@ public: ...@@ -52,9 +52,9 @@ public:
} }
protected: protected:
void _sink_it(const details::log_msg& msg) override void _sink_it(const char* data, size_t size) override
{ {
_file_helper.write(msg); _file_helper.write(data, size);
} }
private: private:
details::file_helper _file_helper; details::file_helper _file_helper;
...@@ -85,15 +85,15 @@ public: ...@@ -85,15 +85,15 @@ public:
protected: protected:
void _sink_it(const details::log_msg& msg) override void _sink_it(const char* data, size_t size) override
{ {
_current_size += msg.formatted.size(); _current_size += size;
if (_current_size > _max_size) if (_current_size > _max_size)
{ {
_rotate(); _rotate();
_current_size = msg.formatted.size(); _current_size = size;
} }
_file_helper.write(msg); _file_helper.write(data, size);
} }
...@@ -169,7 +169,7 @@ public: ...@@ -169,7 +169,7 @@ public:
protected: protected:
void _sink_it(const details::log_msg& msg) override void _sink_it(const char* data, size_t size) override
{ {
if (std::chrono::system_clock::now() >= _midnight_tp) if (std::chrono::system_clock::now() >= _midnight_tp)
{ {
...@@ -177,7 +177,7 @@ protected: ...@@ -177,7 +177,7 @@ protected:
_file_helper.open(calc_filename(_base_filename, _extension)); _file_helper.open(calc_filename(_base_filename, _extension));
_midnight_tp = _calc_midnight_tp(); _midnight_tp = _calc_midnight_tp();
} }
_file_helper.write(msg); _file_helper.write(data, size);
} }
private: private:
......
...@@ -37,7 +37,7 @@ template <class Mutex> ...@@ -37,7 +37,7 @@ template <class Mutex>
class null_sink : public base_sink < Mutex > class null_sink : public base_sink < Mutex >
{ {
protected: protected:
void _sink_it(const details::log_msg&) override void _sink_it(const char*, size_t) override
{} {}
}; };
......
...@@ -45,10 +45,9 @@ public: ...@@ -45,10 +45,9 @@ public:
virtual ~ostream_sink() = default; virtual ~ostream_sink() = default;
protected: protected:
virtual void _sink_it(const details::log_msg& msg) override void _sink_it(const char* data, size_t size) override
{ {
auto& buf = msg.formatted.buf(); _ostream.write(data, size);
_ostream.write(buf.data(), buf.size());
} }
std::ostream& _ostream; std::ostream& _ostream;
}; };
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#pragma once #pragma once
#include "../details/log_msg.h"
namespace spdlog namespace spdlog
{ {
...@@ -34,7 +33,7 @@ class sink ...@@ -34,7 +33,7 @@ class sink
{ {
public: public:
virtual ~sink() {} virtual ~sink() {}
virtual void log(const details::log_msg& msg) = 0; virtual void sink_it(const char* data, size_t size) = 0;
}; };
} }
} }
......
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