#include "logger.h" #include 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 = "yellow"; 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("

%1 %3 %4

"). 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("."); }