feat: add logger with write to file

This commit is contained in:
semenov
2025-08-06 16:04:53 +03:00
parent 305fcb2fad
commit 34dddad3cd
20 changed files with 213 additions and 154 deletions

View File

@@ -2,10 +2,16 @@
#include <QThread>
Logger::Logger()
{
//this->listWidget = widget;
connect(this,&Logger::sigAddToLogger, this, &Logger::handleLog,Qt::QueuedConnection);
createDirectory();
}
Logger &Logger::instance()
{
static Logger logger;
return logger;
}
Logger::~Logger()
@@ -13,22 +19,79 @@ Logger::~Logger()
}
void Logger::setTypeLog(QString type)
void Logger::setLoggingType(LoggingType type)
{
typeLogger = type;
this->loggingType = type;
}
void Logger::addTextToLogger(QString msg)
void Logger::log(QString message, LogLevel level)
{
if(typeLogger == "widget")
emit sigAddToLogger(message,level);
}
void Logger::setLogFile(QString filePath)
{
QMutexLocker locker(&mutex);
if (logFile.isOpen())
{
emit sigSendTextToLogger(msg);
logFile.close();
}
else if (typeLogger == "console")
logFile.setFileName(filePath);
logFile.open(QIODevice::WriteOnly | QIODevice::Append);
}
void Logger::setLogToFile(bool flag)
{
isLogToFile = flag;
if (flag)
{
//qDebug() << msg;
}else
{
emit sigSendTextToLogger(msg);
QString filePath = logFolderPath + "/" + "log " + QDateTime::currentDateTime().toString("dd-MM-yyyy")+".txt";
setLogFile(filePath);
}
}
void Logger::handleLog(QString msg, LogLevel logLevel)
{
QString level;
switch (logLevel)
{
case INFO: level = "INFO"; break;
case WARNING: level = "WARNING"; break;
case ERROR: level = "ERROR"; break;
case CRITICAL: level = "CRITICAL"; break;
}
QString timeStamp = QDateTime::currentDateTime().toString("hh:mm:ss");
QString message = timeStamp + " " + level + " " + msg;
if (loggingType == LoggingType::WIDGET)
{
emit sigLogToWidget(message);
}
else if(loggingType == LoggingType::CONSOLE)
{
qDebug() << message;
}
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(".");
}