#include "logger.h" #include "loggermessage.h" #include Q_LOGGING_CATEGORY(sdkcore, "sdk.core"); Q_LOGGING_CATEGORY(sdknetwork, "sdk.network"); Q_LOGGING_CATEGORY(sdkcompress, "sdk.compress"); namespace core { Logger* Logger::sConsumer = nullptr; //bool Logger::sShowFunction = false; /** * @brief Used to have user specific consumer of logger messages * @param consumer - inv::Logger */ void Logger::setConsumer(Logger *consumer) { sConsumer = consumer; } Logger::Logger(QObject *parent) : QObject(parent) { qRegisterMetaType(); } QList Logger::getNewMessages(int currentCount) { QMutexLocker locker(&mMutex); QList list; int count = mLogMessages.count(); int total = count - currentCount; if (total <= 0) return list; for (int i = 0; i < total; ++i) { int currentIndex = currentCount; int row = i + currentIndex; list.append(mLogMessages.at(row)); } return list; } void Logger::outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg) { QString shortFile = QFileInfo(context.file).fileName(); QString text; QString textType; switch (type) { case QtDebugMsg: textType = QStringLiteral("debug"); break; case QtWarningMsg: textType = QStringLiteral("warning"); break; case QtCriticalMsg: textType = QStringLiteral("critical"); break; case QtFatalMsg: textType = QStringLiteral("fatal"); break; #if QT_VERSION >= 0x050500 case QtInfoMsg: textType = QStringLiteral("info"); break; #endif } if (sConsumer) { LoggerMessage logmsg(shortFile,context.line,context.function,textType,context.category,msg, QLatin1String("")); sConsumer->insertMessage(logmsg); // emiting message } // Output message //text += QString("%1 %2:%3 %4").arg(context.category).arg(shortFile).arg(context.line).arg(msg); // New output syntax text = QStringLiteral("[%1] %2 [ %3:%4 | %5 | %6 ]") .arg(textType, msg, shortFile) .arg(context.line) .arg(context.function, context.category); QTextStream out(stderr); out << text << "\n"; //.toLocal8Bit() + "\n"; //out.flush(); // INVSDK-37 ORK-102 crash on windows when flush() -> possible threading problem if (type == QtFatalMsg) abort(); } void Logger::insertMessage(const LoggerMessage& logmsg) { emit sConsumer->messageReceived(logmsg); QMutexLocker locker(&sConsumer->mMutex); sConsumer->mLogMessages.append(logmsg); emit sConsumer->messageListUpdated(); } } // core