gpt4all

Форк
0
/
logger.cpp 
65 строк · 1.8 Кб
1
#include "logger.h"
2

3
#include <QFile>
4
#include <QDebug>
5
#include <QStandardPaths>
6
#include <QDateTime>
7
#include <iostream>
8

9
class MyLogger: public Logger { };
10
Q_GLOBAL_STATIC(MyLogger, loggerInstance)
11
Logger *Logger::globalInstance()
12
{
13
    return loggerInstance();
14
}
15

16
Logger::Logger()
17
{
18
    // Get log file dir
19
    auto dir = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
20
    // Remove old log file
21
    QFile::remove(dir+"/log-prev.txt");
22
    QFile::rename(dir+"/log.txt", dir+"/log-prev.txt");
23
    // Open new log file
24
    m_file.setFileName(dir+"/log.txt");
25
    if (!m_file.open(QIODevice::NewOnly | QIODevice::WriteOnly | QIODevice::Text)) {
26
        qWarning() << "Failed to open log file, logging to stdout...";
27
        m_file.open(stdout, QIODevice::WriteOnly | QIODevice::Text);
28
    }
29
    // On success, install message handler
30
    qInstallMessageHandler(Logger::messageHandler);
31
}
32

33
void Logger::messageHandler(QtMsgType type, const QMessageLogContext &, const QString &msg)
34
{
35
    auto logger = globalInstance();
36
    // Get message type as string
37
    QString typeString;
38
    switch (type) {
39
    case QtDebugMsg:
40
        typeString = "Debug";
41
        break;
42
    case QtInfoMsg:
43
        typeString = "Info";
44
        break;
45
    case QtWarningMsg:
46
        typeString = "Warning";
47
        break;
48
    case QtCriticalMsg:
49
        typeString = "Critical";
50
        break;
51
    case QtFatalMsg:
52
        typeString = "Fatal";
53
        break;
54
    default:
55
        typeString = "???";
56
    }
57
    // Get time and date
58
    auto timestamp = QDateTime::currentDateTime().toString();
59
    // Write message
60
    const std::string out = QString("[%1] (%2): %4\n").arg(typeString, timestamp, msg).toStdString();
61
    logger->m_file.write(out.c_str());
62
    logger->m_file.flush();
63
    std::cerr << out;
64
    fflush(stderr);
65
}
66

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.