3#include <StormByte/string.hxx>
36 enum class STORMBYTE_PUBLIC
Level :
unsigned short {
52 case Level::LowLevel:
return "LowLevel";
53 case Level::Debug:
return "Debug";
54 case Level::Warning:
return "Warning";
55 case Level::Notice:
return "Notice";
56 case Level::Info:
return "Info";
57 case Level::Error:
return "Error";
58 case Level::Fatal:
return "Fatal";
59 default:
return "Unknown";
121 template <
typename T>
123 requires (!std::is_same_v<std::decay_t<T>,
Logger& (*)(
Logger&)
noexcept>) {
124 using DecayedT = std::decay_t<T>;
126 if constexpr (std::is_same_v<DecayedT, bool>) {
127 print_message(value ?
"true" :
"false");
129 else if constexpr (std::is_integral_v<DecayedT> || std::is_floating_point_v<DecayedT>) {
130 print_message(value);
132 else if constexpr (std::is_same_v<DecayedT, std::string> || std::is_same_v<DecayedT, const char*>) {
133 print_message(std::string(value));
135 else if constexpr (std::is_same_v<DecayedT, std::wstring> || std::is_same_v<DecayedT, const wchar_t*>) {
136 print_message(String::UTF8Encode(value));
138 else if constexpr (std::is_array_v<T> && std::is_same_v<std::remove_extent_t<T>,
char>) {
139 print_message(std::string(value));
142 static_assert(!std::is_same_v<T, T>,
"Unsupported type for Logger::operator<<");
150 std::optional<Level> m_current_level;
151 bool m_header_displayed;
152 const std::string m_format;
153 String::Format m_human_readable_format;
174 if (m_human_readable_format == String::Format::Raw) {
175 message = std::to_string(value);
179 message = String::HumanReadable(value, m_human_readable_format,
"en_US.UTF-8");
181 print_message(message);
185 void print_message(
const std::string& message)
noexcept;
188 void print_message(
const wchar_t& value)
noexcept;
192 inline STORMBYTE_PUBLIC Logger& humanreadable_number(Logger&
logger)
noexcept {
193 logger.m_human_readable_format = String::Format::HumanReadableNumber;
198 inline STORMBYTE_PUBLIC Logger& humanreadable_bytes(Logger&
logger)
noexcept {
199 logger.m_human_readable_format = String::Format::HumanReadableBytes;
204 inline STORMBYTE_PUBLIC Logger& nohumanreadable(Logger&
logger)
noexcept {
205 logger.m_human_readable_format = String::Format::Raw;
209 template <
typename Ptr,
typename T>
211 requires std::is_same_v<Ptr, std::shared_ptr<Logger>> || std::is_same_v<Ptr, std::unique_ptr<Logger>> {
218 template <
typename Ptr>
220 requires std::is_same_v<Ptr, std::shared_ptr<Logger>> || std::is_same_v<Ptr, std::unique_ptr<Logger>> {
227 template <
typename Ptr>
229 requires std::is_same_v<Ptr, std::shared_ptr<Logger>> || std::is_same_v<Ptr, std::unique_ptr<Logger>> {
A flexible and extensible logging utility.
Definition logger.hxx:25
enum STORMBYTE_PUBLIC Info
Info level.
Definition logger.hxx:41
static constexpr std::string LevelToString(const Level &l) noexcept
Definition logger.hxx:50
enum STORMBYTE_PUBLIC Warning
Warning level.
Definition logger.hxx:39
enum STORMBYTE_PUBLIC Level
Low level debug level.
Definition logger.hxx:36
Logger(std::ostream &out, const Level &level=Level::Info, const std::string &format="[%L] %T") noexcept
enum STORMBYTE_PUBLIC Debug
Debug level.
Definition logger.hxx:38
enum STORMBYTE_PUBLIC Notice
Notice level.
Definition logger.hxx:40
Logger & operator<<(const T &value) noexcept
Definition logger.hxx:122
enum STORMBYTE_PUBLIC Error
Error level.
Definition logger.hxx:42
Main namespace for the StormByte library.
std::conditional_t< is_reference< T >::value, std::expected< std::reference_wrapper< std::remove_reference_t< T > >, std::shared_ptr< E > >, std::expected< T, std::shared_ptr< E > > > Expected
Expected type with support for reference types.
Definition expected.hxx:32