5 #include <condition_variable> 12 #define LOG(lvl) logging::LogWriter<lvl> 13 #define TRACE LOG(logging::Severity::trace)() << __FILE__ << ":" << __LINE__ << " " 14 #define DEBUG LOG(logging::Severity::debug)() 15 #define INFO LOG(logging::Severity::info)() 16 #define WARNING LOG(logging::Severity::warning)() 17 #define ERROR LOG(logging::Severity::error)() 18 #define FATAL LOG(logging::Severity::fatal)() 20 #define DEFAULT_LOGGING \ 21 auto default_sink = std::make_shared<logging::LogSinkPrinter>(); \ 22 logging::LoggerImpl::get().setOutput(std::static_pointer_cast<logging::LogSink>(default_sink)); 35 "INFO",
"DEBUG",
"TRACE"};
41 const std::chrono::high_resolution_clock::time_point
_timestamp;
44 LogMessage(
const std::chrono::high_resolution_clock::time_point t,
46 const std::string & m) :
59 virtual void write(
const LogMessage&& msg) = 0;
69 std::string formatMessage(
const LogMessage&& msg)
const;
118 void setOutput(
const std::shared_ptr<LogSink>& output);
126 _running(ATOMIC_FLAG_INIT),
132 while (!_messages.empty() && !_sink.expired()) { _cond.notify_one(); }
148 template <Severity s>
151 const std::chrono::high_resolution_clock::time_point
_timestamp;
153 LogWriter() : _timestamp(std::chrono::high_resolution_clock::now()) {};
162 template <
typename T>
164 _message << log_object;
LogMessage(const std::chrono::high_resolution_clock::time_point t, const Severity s, const std::string &m)
Definition: logging.hpp:44
std::queue< LogMessage > _messages
Definition: logging.hpp:86
std::atomic_bool _running
Definition: logging.hpp:90
Definition: logging.hpp:27
Definition: logging.hpp:26
Definition: logging.hpp:30
static LoggerImpl & get()
Definition: logging.cpp:56
Definition: logging.cpp:9
std::condition_variable _cond
Definition: logging.hpp:88
const Severity _severity
Definition: logging.hpp:42
LoggerImpl()
Definition: logging.hpp:121
Definition: logging.hpp:40
const std::string severity_lines[]
Definition: logging.hpp:34
std::unique_ptr< std::thread > _writer
Definition: logging.hpp:89
LogWriter()
Definition: logging.hpp:153
Definition: logging.hpp:31
Definition: logging.hpp:85
Definition: logging.hpp:149
std::mutex _mutex
Definition: logging.hpp:87
void log(const LogMessage &&msg)
Definition: logging.cpp:11
Definition: logging.hpp:65
Severity
Definition: logging.hpp:25
~LoggerImpl()
Definition: logging.hpp:130
~LogWriter()
Definition: logging.hpp:154
Definition: logging.hpp:55
std::weak_ptr< LogSink > _sink
Definition: logging.hpp:92
unsigned int _log_repeat
Definition: logging.hpp:91
const std::chrono::high_resolution_clock::time_point _timestamp
Definition: logging.hpp:41
Definition: logging.hpp:29
Definition: logging.hpp:28
std::stringstream _message
Definition: logging.hpp:150
const std::string _message
Definition: logging.hpp:43
const std::chrono::high_resolution_clock::time_point _timestamp
Definition: logging.hpp:151