19 class Log :
public AttributeMap
48 Log &operator=(
const Log &) =
delete;
51 , message_(std::move(other.message_))
52 , logLevel_(std::move(other.logLevel_))
56 Log &operator=(Log &&other)
noexcept
60 AttributeMap::operator=(
std::move(other));
73 CExports::CVTSendLog(handle_, message_.c_str());
82 explicit operator bool() const noexcept
84 return handle_ !=
nullptr;
101 template <
typename T,
typename =
void>
106 template <
typename T>
107 struct is_ostreamable<T, void_t<decltype(std::declval<std::ostream &>() << std::declval<T>())>> : std::true_type
112 template <typename T, typename = typename std::enable_if<is_ostreamable<T>::value>::type>
117 message_ += oss.str();
123 (*this)(kv.first, kv.second);
130 , logLevel_(logLevel)
132 auto &
module = Module::Get();
133 if (!module.WouldLog())
135 CExports::CVTLOG handle =
nullptr;
136 CExports::CVTCreateLog(module.Handle(),
static_cast<CExports::CVTLogLevel
>(logLevel), handle);
140 Log() noexcept = default;
143 std::
string message_;