Qt: Redirect Qt messages to logger

This commit is contained in:
Stenzek 2025-07-17 21:18:07 +10:00
parent 6f65a15bb9
commit 4b62ccf2ff
No known key found for this signature in database

View File

@ -61,6 +61,7 @@
#include <QtCore/QEventLoop> #include <QtCore/QEventLoop>
#include <QtCore/QFile> #include <QtCore/QFile>
#include <QtCore/QTimer> #include <QtCore/QTimer>
#include <QtCore/QtLogging>
#include <QtGui/QClipboard> #include <QtGui/QClipboard>
#include <QtGui/QKeyEvent> #include <QtGui/QKeyEvent>
#include <QtWidgets/QFileDialog> #include <QtWidgets/QFileDialog>
@ -96,6 +97,7 @@ static constexpr u32 GDB_SERVER_POLLING_INTERVAL = 1;
namespace QtHost { namespace QtHost {
static bool PerformEarlyHardwareChecks(); static bool PerformEarlyHardwareChecks();
static bool EarlyProcessStartup(); static bool EarlyProcessStartup();
static void MessageOutputHandler(QtMsgType type, const QMessageLogContext& context, const QString& msg);
static void RegisterTypes(); static void RegisterTypes();
static bool InitializeConfig(); static bool InitializeConfig();
static void SetAppRoot(); static void SetAppRoot();
@ -201,6 +203,9 @@ bool QtHost::EarlyProcessStartup()
} }
#endif #endif
// redirect qt errors
qInstallMessageHandler(MessageOutputHandler);
Error error; Error error;
if (System::ProcessStartup(&error)) [[likely]] if (System::ProcessStartup(&error)) [[likely]]
return true; return true;
@ -210,6 +215,33 @@ bool QtHost::EarlyProcessStartup()
return false; return false;
} }
void QtHost::MessageOutputHandler(QtMsgType type, const QMessageLogContext& context, const QString& msg)
{
const char* function = context.function ? context.function : "<unknown>";
const std::string smsg = msg.toStdString();
switch (type)
{
case QtDebugMsg:
DEBUG_LOG("qDebug({}): {}", function, smsg);
break;
case QtInfoMsg:
INFO_LOG("qInfo({}): {}", function, smsg);
break;
case QtWarningMsg:
WARNING_LOG("qWarning({}): {}", function, smsg);
break;
case QtCriticalMsg:
ERROR_LOG("qCritical({}): {}", function, smsg);
break;
case QtFatalMsg:
ERROR_LOG("qFatal({}): {}", function, smsg);
Y_OnPanicReached(smsg.c_str(), function, context.file ? context.file : "<unknown>", context.line);
default:
ERROR_LOG("<unknown>({}): {}", function, smsg);
break;
}
}
bool QtHost::InBatchMode() bool QtHost::InBatchMode()
{ {
return s_batch_mode; return s_batch_mode;