You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
spdlog/include/c11log/details/line_logger.h

80 lines
1.9 KiB
C

12 years ago
#pragma once
#include "../common_types.h"
#include "../logger.h"
12 years ago
#include "stack_oss.h"
12 years ago
12 years ago
// line_logger class.
// aggregates single log line (on the stack if possibe) and calls the logger upon destruction
12 years ago
namespace c11log
{
//class logger;
namespace details
{
class line_logger
{
public:
line_logger(logger* callback_logger, level::level_enum msg_level, bool enabled):
_callback_logger(callback_logger),
12 years ago
_log_msg(msg_level),
12 years ago
_oss(),
12 years ago
_enabled(enabled),
_empty(true)
12 years ago
{
if(enabled)
{
12 years ago
_log_msg.msg_time = log_clock::now();
12 years ago
callback_logger->_formatter->format_header(callback_logger->_logger_name,
12 years ago
_log_msg.msg_level,
_log_msg.msg_time,
12 years ago
_oss);
_log_msg.msg_header_size = _oss.size();
12 years ago
}
}
// No copy intended. Only move
line_logger(const line_logger& other) = delete;
line_logger& operator=(const line_logger&) = delete;
line_logger& operator=(line_logger&&) = delete;
line_logger(line_logger&& other) :
12 years ago
_callback_logger(other._callback_logger),
12 years ago
_log_msg(other._log_msg),
// The move ctor should only be called on start of logging line,
// where no logging happened yet for this line so no need to copy the oss from the other
12 years ago
_oss(),
12 years ago
_enabled(other._enabled) {}
12 years ago
~line_logger()
12 years ago
{
if (!_empty)
12 years ago
{
_oss << os::eol();
12 years ago
_log_msg.msg_buf = _oss.buf();
_callback_logger->_log_it(_log_msg);
12 years ago
}
}
12 years ago
12 years ago
template<typename T>
12 years ago
line_logger& operator<<(const T& what)
12 years ago
{
if (_enabled)
12 years ago
{
12 years ago
_oss << what;
12 years ago
_empty = false;
}
12 years ago
return *this;
12 years ago
}
private:
logger* _callback_logger;
log_msg _log_msg;
12 years ago
details::stack_oss _oss;
12 years ago
bool _enabled;
12 years ago
bool _empty;
12 years ago
};
} //Namespace details
} // Namespace c11log