#include "logger.h" #include "loggermessage.h" #include #include #include Q_LOGGING_CATEGORY(sdkcore, "sdk.core"); Q_LOGGING_CATEGORY(sdknetwork, "sdk.network"); Q_LOGGING_CATEGORY(sdkutils, "sdk.utils"); Q_LOGGING_CATEGORY(sdkutilsdb, "sdk.utils.db"); Q_LOGGING_CATEGORY(sdkdb, "sdk.db"); namespace serversdk { Logger* Logger::sConsumer = nullptr; #ifdef Q_OS_UNIX bool Logger::mColorOutput = true; #else bool Logger::mColorOutput = false; #endif 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; } QString Logger::toColor(const QString &color, const QString &text) { return color + text + "\033[0m"; } void Logger::setColorOutput(bool colorOutput) { mColorOutput = colorOutput; } void Logger::outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg) { QString shortFile = QFileInfo(context.file).fileName(); QString text; QString textType; QString colorTextType; switch (type) { case QtDebugMsg: textType = QStringLiteral("DEBUG"); colorTextType = Logger::toColor("\033[0;31m", textType); break; case QtWarningMsg: textType = QStringLiteral("WARN"); colorTextType = Logger::toColor("\033[0;33m", textType); break; case QtCriticalMsg: textType = QStringLiteral("CRITICAL"); colorTextType = Logger::toColor("\033[0;31m", textType); break; case QtFatalMsg: textType = QStringLiteral("FATAL"); colorTextType = Logger::toColor("\033[0;31m", textType); break; #if QT_VERSION >= 0x050500 case QtInfoMsg: textType = QStringLiteral("INFO"); colorTextType = Logger::toColor("\033[0;34m", textType); break; #endif } if (sConsumer) { LoggerMessage logmsg(shortFile,context.line,context.function,textType,context.category,msg, QLatin1String("")); sConsumer->pushMessage(logmsg); // emiting message } // Output message //text += QString("%1 %2:%3 %4").arg(context.category).arg(shortFile).arg(context.line).arg(msg); // New output syntax QDateTime now = QDateTime::currentDateTime(); const QString textTypeUni = mColorOutput ? colorTextType : textType; text = QStringLiteral("[%1 %2 %3] %4") // [ %3:%4 | %5 | %6 ]") .arg(now.toString("dd-MM-yyyy hh:mm:ss.z")) .arg(textTypeUni) .arg(context.category) .arg(msg); QTextStream out(stderr); out << text << "\n"; //.toLocal8Bit() + "\n"; if (type == QtFatalMsg) abort(); } /** Passing data to consumer */ void Logger::pushMessage(const LoggerMessage& logmsg) { emit sConsumer->messageReceived(logmsg); QMutexLocker locker(&sConsumer->mMutex); sConsumer->mLogMessages.append(logmsg); emit sConsumer->messageListUpdated(); } } // core