4#ifndef QLOGGINGCATEGORY_H
5#define QLOGGINGCATEGORY_H
7#include <QtCore/qglobal.h>
8#include <QtCore/qdebug.h>
12class Q_CORE_EXPORT QLoggingCategory
14 Q_DISABLE_COPY(QLoggingCategory)
16 explicit QLoggingCategory(
const char *category, QtMsgType severityLevel = QtDebugMsg);
19 bool isEnabled(QtMsgType type)
const;
20 void setEnabled(QtMsgType type,
bool enable);
22 bool isDebugEnabled()
const {
return bools.enabledDebug.loadRelaxed(); }
23 bool isInfoEnabled()
const {
return bools.enabledInfo.loadRelaxed(); }
24 bool isWarningEnabled()
const {
return bools.enabledWarning.loadRelaxed(); }
25 bool isCriticalEnabled()
const {
return bools.enabledCritical.loadRelaxed(); }
27 const char *categoryName()
const {
return name; }
30 QLoggingCategory &operator()() {
return *
this; }
31 const QLoggingCategory &operator()()
const {
return *
this; }
33 static QLoggingCategory *defaultCategory();
35 typedef void (*CategoryFilter)(QLoggingCategory*);
36 static CategoryFilter installFilter(CategoryFilter);
38 static void setFilterRules(
const QString &rules);
41 Q_DECL_UNUSED_MEMBER
void *d =
nullptr;
42 const char *name =
nullptr;
45 QBasicAtomicInteger<
bool> enabledDebug;
46 QBasicAtomicInteger<
bool> enabledWarning;
47 QBasicAtomicInteger<
bool> enabledCritical;
48 QBasicAtomicInteger<
bool> enabledInfo;
52 QBasicAtomicInt enabled;
54 Q_DECL_UNUSED_MEMBER
bool placeholder[4];
56 QT_DEFINE_TAG_STRUCT(UnregisteredInitialization);
57 explicit constexpr QLoggingCategory(UnregisteredInitialization,
const char *category)
noexcept;
58 friend class QLoggingRegistry;
62template <
QtMsgType Which>
struct QLoggingCategoryMacroHolder
64 static const bool IsOutputEnabled;
65 const QLoggingCategory *category =
nullptr;
67 explicit QLoggingCategoryMacroHolder(
const QLoggingCategory &cat)
72 void init(
const QLoggingCategory &cat)
noexcept
79 control = cat.isDebugEnabled();
80 }
else if constexpr (Which == QtInfoMsg) {
81 control = cat.isInfoEnabled();
82 }
else if constexpr (Which == QtWarningMsg) {
83 control = cat.isWarningEnabled();
85 control = cat.isCriticalEnabled();
89 static_assert(QtPrivate::value_dependent_false<Which>(),
"Unknown Qt message type");
92 const char *name()
const {
return category->categoryName(); }
93 explicit operator
bool()
const {
return Q_UNLIKELY(control); }
96template <
QtMsgType Which>
const bool QLoggingCategoryMacroHolder<Which>::IsOutputEnabled =
true;
97#if defined(QT_NO_DEBUG_OUTPUT)
100#if defined(QT_NO_INFO_OUTPUT)
103#if defined(QT_NO_WARNING_OUTPUT)
108#define QT_DECLARE_EXPORTED_QT_LOGGING_CATEGORY(name, export_macro)
109 inline namespace QtPrivateLogging { export_macro const QLoggingCategory &name(); }
112#define Q_DECLARE_LOGGING_CATEGORY(name)
113 inline namespace QtPrivateLogging { const QLoggingCategory &name(); }
115#define Q_DECLARE_EXPORTED_LOGGING_CATEGORY(name, export_macro)
116 inline namespace QtPrivateLogging {
117 Q_DECL_DEPRECATED_X("Use QT_DECLARE_EXPORTED_QT_LOGGING_CATEGORY in Qt")
118 export_macro const QLoggingCategory &name();
121#define Q_LOGGING_CATEGORY_IMPL(name, ...)
122 const QLoggingCategory &name()
124 static const QLoggingCategory category(__VA_ARGS__);
128#define Q_LOGGING_CATEGORY(name, ...)
129 inline namespace QtPrivateLogging { Q_LOGGING_CATEGORY_IMPL(name, __VA_ARGS__) }
131 Q_DECL_DEPRECATED_X("Use Q_STATIC_LOGGING_CATEGORY or add "
132 "either Q_DECLARE_LOGGING_CATEGORY or "
133 "QT_DECLARE_EXPORTED_QT_LOGGING_CATEGORY in a header")
134 const QLoggingCategory &name() { return QtPrivateLogging::name(); }
136#define Q_STATIC_LOGGING_CATEGORY(name, ...)
137 static Q_LOGGING_CATEGORY_IMPL(name, __VA_ARGS__)
140#define Q_DECLARE_LOGGING_CATEGORY(name)
141 const QLoggingCategory &name();
143#define Q_DECLARE_EXPORTED_LOGGING_CATEGORY(name, export_macro)
146#define Q_LOGGING_CATEGORY(name, ...)
147 const QLoggingCategory &name()
149 static const QLoggingCategory category(__VA_ARGS__);
153#define Q_STATIC_LOGGING_CATEGORY(name, ...)
157#define QT_MESSAGE_LOGGER_COMMON(category, level)
158 for (QLoggingCategoryMacroHolder<level> qt_category((category)()); qt_category; qt_category.control = false)
QByteArray & operator*() noexcept
QByteArray::Base64DecodingStatus decodingStatus
friend bool operator==(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
Returns true if lhs and rhs are equal, otherwise returns false.
void swap(QByteArray::FromBase64Result &other) noexcept
operator bool() const noexcept
\variable QByteArray::FromBase64Result::decoded
const QByteArray & operator*() const noexcept
Returns the decoded byte array.
friend bool operator!=(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
Returns true if lhs and rhs are different, otherwise returns false.
\inmodule QtCore\reentrant
int initFrom(const QMessageLogContext &logContext)
void populateBacktrace(int frameCount)
QInternalMessageLogContext(const QMessageLogContext &logContext, const QLoggingCategory &categoryOverride)
std::optional< BacktraceStorage > backtrace
static constexpr int DefaultBacktraceDepth
constexpr QMessageLogContext(const char *fileName, int lineNumber, const char *functionName, const char *categoryName) noexcept
constexpr QMessageLogContext() noexcept=default
QDebug debug(CategoryFunction catFunc) const
QDebug debug(const QLoggingCategory &cat) const
Logs a debug message into category cat using a QDebug stream.
void void void void Q_DECL_COLD_FUNCTION void Q_DECL_COLD_FUNCTION void Q_DECL_COLD_FUNCTION void Q_DECL_COLD_FUNCTION void QT_MESSAGE_LOGGER_NORETURN Q_DECL_COLD_FUNCTION void QT_MESSAGE_LOGGER_NORETURN Q_DECL_COLD_FUNCTION void QDebug debug() const
Logs a debug message using a QDebug stream.
QDebug info(const QLoggingCategory &cat) const
Logs an informational message into the category cat using a QDebug stream.
QDebug info() const
Logs an informational message using a QDebug stream.
QNoDebug noDebug(...) const noexcept
QDebug info(CategoryFunction catFunc) const
static Q_CONSTINIT thread_local bool msgHandlerGrabbed
static const char ifCriticalTokenC[]
static const char emptyTokenC[]
static Q_NEVER_INLINE void qt_message(QtMsgType msgType, const QMessageLogContext &context, const char *msg, va_list ap)
static void preformattedMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &formattedMessage)
static bool systemHasStderr()
Returns true if writing to stderr is supported.
static const char endifTokenC[]
static bool isDefaultCategory(const char *category)
static const char messageTokenC[]
static bool qt_append_thread_name_to(QString &message)
static constexpr SystemMessageSink systemMessageSink
static void qt_maybe_message_fatal(QtMsgType, const QMessageLogContext &context, String &&message)
\inmodule QtCore \title Qt Logging Types
#define HANDLE_IF_TOKEN(LEVEL)
Q_DECLARE_TYPEINFO(QMessagePattern::BacktraceParams, Q_RELOCATABLE_TYPE)
static const char timeTokenC[]
static bool isFatalCountDown(const char *varname, QBasicAtomicInt &n)
static const char qthreadptrTokenC[]
static const char fileTokenC[]
static const char ifDebugTokenC[]
static const char ifFatalTokenC[]
static const char categoryTokenC[]
static const char lineTokenC[]
static const char typeTokenC[]
static const char ifCategoryTokenC[]
static int checked_var_value(const char *varname)
static const char threadnameTokenC[]
static const char pidTokenC[]
Q_TRACE_POINT(qtcore, qt_message_print, int type, const char *category, const char *function, const char *file, int line, const QString &message)
static const char threadidTokenC[]
static QString formatLogMessage(QtMsgType type, const QMessageLogContext &context, const QString &str)
static const char backtraceTokenC[]
static const char functionTokenC[]
static const char ifWarningTokenC[]
static const char appnameTokenC[]
static bool isFatal(QtMsgType msgType)
static const char ifInfoTokenC[]
static void qt_message_print(QtMsgType, const QMessageLogContext &context, const QString &message)
static bool stderrHasConsoleAttached()
Returns true if writing to stderr will end up in a console/terminal visible to the user.
Combined button and popup list for selecting options.
LRESULT QT_WIN_CALLBACK deviceNotificationWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
QDebug printAssociativeContainer(QDebug debug, const char *which, const AssociativeContainer &c)
bool shouldLogToStderr()
Returns true if logging stderr should be ensured.
QDebug printSequentialContainer(QDebug debug, const char *which, const SequentialContainer &c)
QByteArray operator""_ba(const char *str, size_t size) noexcept
QT_BEGIN_NAMESPACE Q_NORETURN void qAbort()
QByteArray operator+(const QByteArray &a1, const char *a2)
QByteArray qUncompress(const QByteArray &data)
QByteArray operator+(char a1, const QByteArray &a2)
QByteArray operator+(QByteArray &&lhs, char rhs)
QByteArray operator+(const QByteArray &a1, char a2)
QByteArray operator+(const char *a1, const QByteArray &a2)
QByteArray operator+(QByteArray &&lhs, const QByteArray &rhs)
qsizetype erase_if(QByteArray &ba, Predicate pred)
QByteArray operator+(const QByteArray &a1, const QByteArray &a2)
QByteArray qCompress(const QByteArray &data, int compressionLevel=-1)
qsizetype erase(QByteArray &ba, const T &t)
QByteArray operator+(QByteArray &&lhs, const char *rhs)
#define __has_cpp_attribute(x)
void qt_QMetaEnum_flagDebugOperator(QDebug &debug, size_t sizeofT, Int value)
Q_CORE_EXPORT void qt_QMetaEnum_flagDebugOperator(QDebug &debug, size_t sizeofT, quint64 value)
Q_CORE_EXPORT void qt_QMetaEnum_flagDebugOperator(QDebug &debug, size_t sizeofT, uint value)
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
#define QT_MESSAGELOG_FUNC
Q_CORE_EXPORT Q_DECL_COLD_FUNCTION void qErrnoWarning(int code, const char *msg,...)
Q_CORE_EXPORT Q_DECL_COLD_FUNCTION void qErrnoWarning(const char *msg,...)
#define QT_MESSAGELOG_FILE
#define QT_MESSAGE_LOGGER_NORETURN
#define QT_MESSAGELOG_LINE
Q_CORE_EXPORT void qSetMessagePattern(const QString &messagePattern)
#define QT_MESSAGELOGCONTEXT
Q_CORE_EXPORT void qt_message_output(QtMsgType, const QMessageLogContext &context, const QString &message)
void(* QtMessageHandler)(QtMsgType, const QMessageLogContext &, const QString &)
#define Q_LOGGING_CATEGORY(name,...)
#define QT_MESSAGE_LOGGER_COMMON(category, level)
#define Q_DECLARE_LOGGING_CATEGORY(name)
QString backtraceSeparator
void setPattern(const QString &pattern)
std::unique_ptr< std::unique_ptr< const char[]>[]> literals
std::chrono::steady_clock::time_point appStartTime
std::unique_ptr< const char *[]> tokens
QList< QString > timeArgs
static constexpr bool Value
static constexpr bool Value