forked from ondra/server-sdk
133 lines
3.3 KiB
C++
133 lines
3.3 KiB
C++
#include "logger.h"
|
|
#include "loggermessage.h"
|
|
|
|
#include <QLoggingCategory>
|
|
#include <QFileInfo>
|
|
#include <QDateTime>
|
|
|
|
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<LoggerMessage>();
|
|
|
|
}
|
|
|
|
QList<LoggerMessage> Logger::getNewMessages(int currentCount)
|
|
{
|
|
QMutexLocker locker(&mMutex);
|
|
QList<LoggerMessage> 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
|
|
|