Logging: introduce QInternalMessageLogContext to hold current context
QMessageLogContext is a primitive type that may be extended in the future with more fields (it has been at version 2 since commit 6d166c88220ee09821b65fb2b711fa77a5312971, though that did not extend the struct's size). This introduces a QInternalMessageLogContext which is used in before all our calls to qt_message_output(). Currently there's no difference and no way to tell that the internal version is used. Change-Id: I01ec3c774d9943adb903fffd17b7d5abc0052207 Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
This commit is contained in:
parent
7aedcdefb8
commit
d9f7104166
@ -382,9 +382,10 @@ static void qt_message(QtMsgType msgType, const QMessageLogContext &context, con
|
||||
*/
|
||||
void QMessageLogger::debug(const char *msg, ...) const
|
||||
{
|
||||
QInternalMessageLogContext ctxt(context);
|
||||
va_list ap;
|
||||
va_start(ap, msg); // use variable arg list
|
||||
qt_message(QtDebugMsg, context, msg, ap);
|
||||
qt_message(QtDebugMsg, ctxt, msg, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
@ -397,9 +398,10 @@ void QMessageLogger::debug(const char *msg, ...) const
|
||||
*/
|
||||
void QMessageLogger::info(const char *msg, ...) const
|
||||
{
|
||||
QInternalMessageLogContext ctxt(context);
|
||||
va_list ap;
|
||||
va_start(ap, msg); // use variable arg list
|
||||
qt_message(QtInfoMsg, context, msg, ap);
|
||||
qt_message(QtInfoMsg, ctxt, msg, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
@ -429,9 +431,7 @@ void QMessageLogger::debug(const QLoggingCategory &cat, const char *msg, ...) co
|
||||
if (!cat.isDebugEnabled())
|
||||
return;
|
||||
|
||||
QMessageLogContext ctxt;
|
||||
ctxt.copyContextFrom(context);
|
||||
ctxt.category = cat.categoryName();
|
||||
QInternalMessageLogContext ctxt(context, cat());
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, msg); // use variable arg list
|
||||
@ -453,9 +453,7 @@ void QMessageLogger::debug(QMessageLogger::CategoryFunction catFunc,
|
||||
if (!cat.isDebugEnabled())
|
||||
return;
|
||||
|
||||
QMessageLogContext ctxt;
|
||||
ctxt.copyContextFrom(context);
|
||||
ctxt.category = cat.categoryName();
|
||||
QInternalMessageLogContext ctxt(context, cat());
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, msg); // use variable arg list
|
||||
@ -534,9 +532,7 @@ void QMessageLogger::info(const QLoggingCategory &cat, const char *msg, ...) con
|
||||
if (!cat.isInfoEnabled())
|
||||
return;
|
||||
|
||||
QMessageLogContext ctxt;
|
||||
ctxt.copyContextFrom(context);
|
||||
ctxt.category = cat.categoryName();
|
||||
QInternalMessageLogContext ctxt(context, cat());
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, msg); // use variable arg list
|
||||
@ -558,9 +554,7 @@ void QMessageLogger::info(QMessageLogger::CategoryFunction catFunc,
|
||||
if (!cat.isInfoEnabled())
|
||||
return;
|
||||
|
||||
QMessageLogContext ctxt;
|
||||
ctxt.copyContextFrom(context);
|
||||
ctxt.category = cat.categoryName();
|
||||
QInternalMessageLogContext ctxt(context, cat());
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, msg); // use variable arg list
|
||||
@ -624,9 +618,10 @@ QDebug QMessageLogger::info(QMessageLogger::CategoryFunction catFunc) const
|
||||
*/
|
||||
void QMessageLogger::warning(const char *msg, ...) const
|
||||
{
|
||||
QInternalMessageLogContext ctxt(context);
|
||||
va_list ap;
|
||||
va_start(ap, msg); // use variable arg list
|
||||
qt_message(QtWarningMsg, context, msg, ap);
|
||||
qt_message(QtWarningMsg, ctxt, msg, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
@ -642,9 +637,7 @@ void QMessageLogger::warning(const QLoggingCategory &cat, const char *msg, ...)
|
||||
if (!cat.isWarningEnabled())
|
||||
return;
|
||||
|
||||
QMessageLogContext ctxt;
|
||||
ctxt.copyContextFrom(context);
|
||||
ctxt.category = cat.categoryName();
|
||||
QInternalMessageLogContext ctxt(context, cat());
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, msg); // use variable arg list
|
||||
@ -666,9 +659,7 @@ void QMessageLogger::warning(QMessageLogger::CategoryFunction catFunc,
|
||||
if (!cat.isWarningEnabled())
|
||||
return;
|
||||
|
||||
QMessageLogContext ctxt;
|
||||
ctxt.copyContextFrom(context);
|
||||
ctxt.category = cat.categoryName();
|
||||
QInternalMessageLogContext ctxt(context, cat());
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, msg); // use variable arg list
|
||||
@ -729,9 +720,10 @@ QDebug QMessageLogger::warning(QMessageLogger::CategoryFunction catFunc) const
|
||||
*/
|
||||
void QMessageLogger::critical(const char *msg, ...) const
|
||||
{
|
||||
QInternalMessageLogContext ctxt(context);
|
||||
va_list ap;
|
||||
va_start(ap, msg); // use variable arg list
|
||||
qt_message(QtCriticalMsg, context, msg, ap);
|
||||
qt_message(QtCriticalMsg, ctxt, msg, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
@ -747,9 +739,7 @@ void QMessageLogger::critical(const QLoggingCategory &cat, const char *msg, ...)
|
||||
if (!cat.isCriticalEnabled())
|
||||
return;
|
||||
|
||||
QMessageLogContext ctxt;
|
||||
ctxt.copyContextFrom(context);
|
||||
ctxt.category = cat.categoryName();
|
||||
QInternalMessageLogContext ctxt(context, cat());
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, msg); // use variable arg list
|
||||
@ -771,9 +761,7 @@ void QMessageLogger::critical(QMessageLogger::CategoryFunction catFunc,
|
||||
if (!cat.isCriticalEnabled())
|
||||
return;
|
||||
|
||||
QMessageLogContext ctxt;
|
||||
ctxt.copyContextFrom(context);
|
||||
ctxt.category = cat.categoryName();
|
||||
QInternalMessageLogContext ctxt(context, cat());
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, msg); // use variable arg list
|
||||
@ -836,9 +824,7 @@ QDebug QMessageLogger::critical(QMessageLogger::CategoryFunction catFunc) const
|
||||
*/
|
||||
void QMessageLogger::fatal(const QLoggingCategory &cat, const char *msg, ...) const noexcept
|
||||
{
|
||||
QMessageLogContext ctxt;
|
||||
ctxt.copyContextFrom(context);
|
||||
ctxt.category = cat.categoryName();
|
||||
QInternalMessageLogContext ctxt(context, cat());
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, msg); // use variable arg list
|
||||
@ -862,9 +848,7 @@ void QMessageLogger::fatal(QMessageLogger::CategoryFunction catFunc,
|
||||
{
|
||||
const QLoggingCategory &cat = (*catFunc)();
|
||||
|
||||
QMessageLogContext ctxt;
|
||||
ctxt.copyContextFrom(context);
|
||||
ctxt.category = cat.categoryName();
|
||||
QInternalMessageLogContext ctxt(context, cat());
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, msg); // use variable arg list
|
||||
@ -884,9 +868,10 @@ void QMessageLogger::fatal(QMessageLogger::CategoryFunction catFunc,
|
||||
*/
|
||||
void QMessageLogger::fatal(const char *msg, ...) const noexcept
|
||||
{
|
||||
QInternalMessageLogContext ctxt(context);
|
||||
va_list ap;
|
||||
va_start(ap, msg); // use variable arg list
|
||||
QT_TERMINATE_ON_EXCEPTION(qt_message(QtFatalMsg, context, msg, ap));
|
||||
QT_TERMINATE_ON_EXCEPTION(qt_message(QtFatalMsg, ctxt, msg, ap));
|
||||
va_end(ap);
|
||||
|
||||
#ifndef Q_CC_MSVC_ONLY
|
||||
@ -2057,9 +2042,10 @@ static void qt_message_fatal(QtMsgType, const QMessageLogContext &context, Strin
|
||||
*/
|
||||
void qt_message_output(QtMsgType msgType, const QMessageLogContext &context, const QString &message)
|
||||
{
|
||||
qt_message_print(msgType, context, message);
|
||||
QInternalMessageLogContext ctx(context);
|
||||
qt_message_print(msgType, ctx, message);
|
||||
if (isFatal(msgType))
|
||||
qt_message_fatal(msgType, context, message);
|
||||
qt_message_fatal(msgType, ctx, message);
|
||||
}
|
||||
|
||||
void qErrnoWarning(const char *msg, ...)
|
||||
@ -2074,7 +2060,7 @@ void qErrnoWarning(const char *msg, ...)
|
||||
va_end(ap);
|
||||
|
||||
buf += " ("_L1 + error_string + u')';
|
||||
QMessageLogContext context;
|
||||
QInternalMessageLogContext context{QMessageLogContext()};
|
||||
qt_message_output(QtWarningMsg, context, buf);
|
||||
}
|
||||
|
||||
@ -2088,7 +2074,7 @@ void qErrnoWarning(int code, const char *msg, ...)
|
||||
va_end(ap);
|
||||
|
||||
buf += " ("_L1 + qt_error_string(code) + u')';
|
||||
QMessageLogContext context;
|
||||
QInternalMessageLogContext context{QMessageLogContext()};
|
||||
qt_message_output(QtWarningMsg, context, buf);
|
||||
}
|
||||
|
||||
|
@ -37,15 +37,17 @@ enum QtMsgType {
|
||||
#endif
|
||||
};
|
||||
|
||||
class QInternalMessageLogContext;
|
||||
class QMessageLogContext
|
||||
{
|
||||
Q_DISABLE_COPY(QMessageLogContext)
|
||||
public:
|
||||
static constexpr int CurrentVersion = 2;
|
||||
constexpr QMessageLogContext() noexcept = default;
|
||||
constexpr QMessageLogContext(const char *fileName, int lineNumber, const char *functionName, const char *categoryName) noexcept
|
||||
: line(lineNumber), file(fileName), function(functionName), category(categoryName) {}
|
||||
|
||||
int version = 2;
|
||||
int version = CurrentVersion;
|
||||
int line = 0;
|
||||
const char *file = nullptr;
|
||||
const char *function = nullptr;
|
||||
@ -54,8 +56,8 @@ public:
|
||||
private:
|
||||
QMessageLogContext ©ContextFrom(const QMessageLogContext &logContext) noexcept;
|
||||
|
||||
friend class QInternalMessageLogContext;
|
||||
friend class QMessageLogger;
|
||||
friend class QDebug;
|
||||
};
|
||||
|
||||
class QLoggingCategory;
|
||||
|
@ -16,6 +16,8 @@
|
||||
//
|
||||
|
||||
#include <QtCore/private/qglobal_p.h>
|
||||
#include "qlogging.h"
|
||||
#include "qloggingcategory.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
@ -25,6 +27,22 @@ Q_CORE_EXPORT bool shouldLogToStderr();
|
||||
|
||||
}
|
||||
|
||||
class QInternalMessageLogContext : public QMessageLogContext
|
||||
{
|
||||
public:
|
||||
QInternalMessageLogContext(const QMessageLogContext &logContext)
|
||||
{
|
||||
copyContextFrom(logContext);
|
||||
}
|
||||
QInternalMessageLogContext(const QMessageLogContext &logContext,
|
||||
const QLoggingCategory &categoryOverride)
|
||||
: QInternalMessageLogContext(logContext)
|
||||
{
|
||||
category = categoryOverride.categoryName();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QLOGGING_P_H
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include "qdebug.h"
|
||||
#include "private/qdebug_p.h"
|
||||
#include "qmetaobject.h"
|
||||
#include <private/qlogging_p.h>
|
||||
#include <private/qtextstream_p.h>
|
||||
#include <private/qtools_p.h>
|
||||
|
||||
@ -150,15 +151,15 @@ QByteArray QtDebugUtils::toPrintable(const char *data, qint64 len, qsizetype max
|
||||
|
||||
Flushes any pending data to be written and destroys the debug stream.
|
||||
*/
|
||||
// Has been defined in the header / inlined before Qt 5.4
|
||||
QDebug::~QDebug()
|
||||
{
|
||||
if (stream && !--stream->ref) {
|
||||
if (stream->space && stream->buffer.endsWith(u' '))
|
||||
stream->buffer.chop(1);
|
||||
if (stream->message_output) {
|
||||
QInternalMessageLogContext ctxt(stream->context);
|
||||
qt_message_output(stream->type,
|
||||
stream->context,
|
||||
ctxt,
|
||||
stream->buffer);
|
||||
}
|
||||
delete stream;
|
||||
|
Loading…
x
Reference in New Issue
Block a user