1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
#include <QCoreApplication>
#include <QQmlEngine>
#include "messagelogger.h"
static QStringList s_messages;
static void logFunc(QtMsgType type, const QMessageLogContext &context, const QString &msg) {
Q_UNUSED(type);
Q_UNUSED(context);
Q_UNUSED(msg);
MessageLogger::globalInstance()->log(msg);
QByteArray localMsg = msg.toLocal8Bit();
fprintf(stderr, "%s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
}
MessageLogger::MessageLogger(QObject *parent) : QObject(parent)
{
}
void MessageLogger::install()
{
qInstallMessageHandler(logFunc);
}
void MessageLogger::log(const QString &message)
{
s_messages << message;
}
QStringList MessageLogger::messages() const
{
return s_messages;
}
void MessageLogger::setMessages(const QStringList &messages)
{
s_messages = messages;
}
MessageLogger *MessageLogger::globalInstance()
{
static MessageLogger* instance = nullptr;
if (!instance) {
instance = new MessageLogger(QCoreApplication::instance());
}
return instance;
}
void MessageLogger::clear()
{
s_messages.clear();
}
static QObject *provider(QQmlEngine *engine, QJSEngine *scriptEngine) {
Q_UNUSED(engine);
Q_UNUSED(scriptEngine);
MessageLogger* logger = new MessageLogger(engine);
return logger;
}
static void init() {
qmlRegisterSingletonType<MessageLogger>("MessageLogger", 1, 0, "MessageLogger", provider);
}
Q_COREAPP_STARTUP_FUNCTION(init)
|