Files
RRJServer/LibServer/Systems/logger.cpp
2026-01-22 11:48:21 +03:00

139 lines
3.0 KiB
C++

#include "logger.h"
#include <QThread>
Logger::Logger()
{
connect(this,&Logger::sigAddToLogger, this, &Logger::handleLog,Qt::AutoConnection);
createDirectory();
}
Logger &Logger::instance()
{
static Logger logger;
return logger;
}
Logger::~Logger()
{
}
void Logger::setLoggingType(LoggingType type)
{
this->loggingType = type;
}
void Logger::log(QString message, LogLevel level)
{
emit sigAddToLogger(message,level);
}
void Logger::setLogFile(QString filePath)
{
QMutexLocker locker(&mutex);
if (logFile.isOpen())
{
logFile.close();
}
logFile.setFileName(filePath);
logFile.open(QIODevice::WriteOnly | QIODevice::Append);
}
void Logger::setLogToFile(bool flag)
{
isLogToFile = flag;
if (flag)
{
QString filePath = logFolderPath + "/" + "log " + QDateTime::currentDateTime().toString("dd-MM-yyyy")+".txt";
setLogFile(filePath);
}
}
void Logger::handleLog(QString msg, LogLevel logLevel)
{
/*
color: red; * Красный *
color: green; * Зелёный *
color: blue; * Синий *
color: yellow; * Жёлтый *
color: black; * Чёрный *
color: white; * Белый *
color: purple; * Фиолетовый *
color: orange; * Оранжевый *
color: pink; * Розовый *
color: brown; * Коричневый *
color: gray; * Серый *
*/
QString level;
QString colorLevel = "pink";
//#ifndef PROJECT_TYPE_DEBUG
// if(logLevel == DEBUG)
// return;
//#endif
switch (logLevel)
{
case INFO:
level = "INFO";
colorLevel = "green";
break;
case WARNING:
level = "WARNING";
colorLevel = "orange";
break;
case ERROR:
level = "ERROR";
colorLevel = "red";
break;
case CRITICAL:
level = "CRITICAL";
colorLevel = "purple";
break;
case DEBUG:
level = "DEBUG";
colorLevel = "brown";
break;
}
QString timeStamp = QDateTime::currentDateTime().toString("hh:mm:ss");
QString message = timeStamp + " " + level + " " + msg;
QString messageHTML = QString("<p><span style=\"color: blue;\">%1</span> <span style=\"color: %2;\">%3</span> <span style=\"color: black;\">%4</span></p>").
arg(timeStamp, colorLevel, level, msg);
if (loggingType == LoggingType::WIDGET)
{
emit sigLogToWidget(messageHTML);
}
else if(loggingType == LoggingType::CONSOLE)
{
qDebug() << messageHTML;
}
if(isLogToFile)
{
QMutexLocker locker(&mutex);
if (logFile.isOpen())
{
QTextStream stream(&logFile);
stream << message << "\n";
}
}
}
void Logger::createDirectory()
{
QString directoryPath = logFolderPath;
QDir dir(directoryPath);
if(!dir.exists()) dir.mkdir(".");
}