18 #include <shared_mutex>
31 #define QX_LOG_C(category, eVerbosity, ...) _QX_LOG_C(constexpr, category, eVerbosity, ##__VA_ARGS__)
38 #define QX_LOG(eVerbosity, ...) QX_LOG_C(QX_GET_FILE_CATEGORY(), eVerbosity, ##__VA_ARGS__)
46 #define QX_LOG_REF(category, eVerbosity, ...) _QX_LOG_C(, category, eVerbosity, ##__VA_ARGS__)
64 #if QX_CLANG || QX_APPLE_CLANG || QX_GNU
75 using format_function = std::function<
string(
79 string_view svFunction,
83 verbosity eRuntimeVerbosity = verbosity::detailed;
84 format_function formatFunction;
87 using category_data_map = std::unordered_map<string_view, category_data>;
92 virtual ~
logger() noexcept;
128 verbosity eVerbosity,
130 string_view svFunction,
137 virtual
void flush();
142 virtual
void reset() noexcept;
170 verbosity eVerbosity,
172 string_view svFunction,
174 string sMessage) noexcept;
184 QX_PERF_SHARED_MUTEX(m_StreamsMutex);
187 QX_PERF_SHARED_MUTEX(m_RegisteredCategoriesMutex);
188 category_data_map m_RegisteredCategories;
214 inline logger* g_pGlobalLogger =
nullptr;
222 return g_pGlobalLogger ? *g_pGlobalLogger : logger_singleton::get_instance().get_logger();
229 #define _QX_LOG_C(verbosityCheckKeyword, category, eVerbosity, ...) \
232 verbosityCheckKeyword const auto& _category = category; \
233 if verbosityCheckKeyword (eVerbosity >= _category.get_verbosity()) \
235 qx::logger& _logger = qx::get_logger(); \
240 qx::convert_string_literal<qx::char_type, __FUNCTION__>(), \
242 _QX_MACRO_USER_MESSAGE(_logger._get_string_pool(), __VA_ARGS__)); \
Base class for logger streams.
A category is a class that identifies a particular piece of code. This code can be located in differe...
bool log_required(const category &category, verbosity eVerbosity) const noexcept
Returns true if a log with given category and verbosity will be logged.
void add_stream(stream_t stream) noexcept
Add an output stream to the logger.
void register_category(const category &category, category_data data) noexcept
Add custom rules for category.
virtual void reset() noexcept
Reset logger and clear all streams.
virtual void log(const category &category, verbosity eVerbosity, string_view svFile, string_view svFunction, int nLine, logger_string_pool::item message)
Log to all streams.
static constexpr string_view get_verbosity_prefix(verbosity eVerbosity) noexcept
Get verbosity prefix.
static string default_formatter(const category &category, verbosity eVerbosity, string_view svFile, string_view svFunction, int nLine, string sMessage) noexcept
The default log line formatter.
virtual void flush()
Flush all streams.
Small Buffer Object for polymorphic classes.
Fixed-size atomic string pool.
Inherit the necessary singleton class from this.
logger & get_logger() noexcept
Get the logger instance used in QX_LOG macros.