gpt4all/gpt4all-chat/logger.cpp

66 lines
1.8 KiB
C++
Raw Normal View History

2023-06-01 14:50:42 +00:00
#include "logger.h"
#include <QFile>
#include <QDebug>
#include <QStandardPaths>
#include <QDateTime>
2023-06-01 18:14:06 +00:00
#include <iostream>
2023-06-01 14:50:42 +00:00
class MyLogger: public Logger { };
Q_GLOBAL_STATIC(MyLogger, loggerInstance)
Logger *Logger::globalInstance()
{
return loggerInstance();
}
Logger::Logger()
{
// Get log file dir
auto dir = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
// Remove old log file
QFile::remove(dir+"/log-prev.txt");
QFile::rename(dir+"/log.txt", dir+"/log-prev.txt");
// Open new log file
m_file.setFileName(dir+"/log.txt");
if (!m_file.open(QIODevice::NewOnly | QIODevice::WriteOnly | QIODevice::Text)) {
qWarning() << "Failed to open log file, logging to stdout...";
m_file.open(stdout, QIODevice::WriteOnly | QIODevice::Text);
}
// On success, install message handler
qInstallMessageHandler(Logger::messageHandler);
}
void Logger::messageHandler(QtMsgType type, const QMessageLogContext &, const QString &msg)
{
auto logger = globalInstance();
// Get message type as string
QString typeString;
switch (type) {
case QtDebugMsg:
typeString = "Debug";
break;
case QtInfoMsg:
typeString = "Info";
break;
case QtWarningMsg:
typeString = "Warning";
break;
case QtCriticalMsg:
typeString = "Critical";
break;
case QtFatalMsg:
typeString = "Fatal";
break;
default:
typeString = "???";
}
// Get time and date
auto timestamp = QDateTime::currentDateTime().toString();
// Write message
2023-06-01 18:14:06 +00:00
const std::string out = QString("[%1] (%2): %4\n").arg(typeString, timestamp, msg).toStdString();
logger->m_file.write(out.c_str());
2023-06-01 14:50:42 +00:00
logger->m_file.flush();
2023-06-01 18:14:06 +00:00
std::cerr << out;
fflush(stderr);
2023-06-01 14:50:42 +00:00
}