Qt_CMake_Project_Template/sources/logger.cpp

107 lines
3.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "logger.h"
#include <QtCore/QDebug>
#include <QtCore/QDateTime>
#include <iostream>
//==============================================================================
//
// Функция для перехвата вызовов логирования Qt:
//
//==============================================================================
void qtLogMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
// Ошибки и предупреждения дублируются на стандартный вывод ошибок:
if ((type == QtWarningMsg) || (type == QtCriticalMsg) || (type == QtFatalMsg)) {
std::cerr << msg.toLocal8Bit().constData() << std::endl;
}
// Запись строки в лог файл:
Logger::instance().writeLog(type, context, msg);
}
//==============================================================================
//
// Logger
//
//==============================================================================
Logger &Logger::instance()
{
// Создаётнся один экземпляр логгера на всю программу:
static Logger loggerInstance;
return loggerInstance;
}
//==============================================================================
QString Logger::logTypeToString(QtMsgType msgType)
{
switch (msgType) {
case QtDebugMsg:
return "Debug";
case QtInfoMsg:
return "Info";
case QtWarningMsg:
return "Warning";
case QtCriticalMsg:
return "Error";
case QtFatalMsg:
return "Fatal";
default:
return "Text";
}
}
//==============================================================================
void Logger::start()
{
// Регистрация нашей функции в качестве обработчика для логов:
qInstallMessageHandler( qtLogMessageOutput );
// Тут надо открыть файл logFile для записи логов и держать открытым до вызова stop()
// После открытия тут же записать в лог начальные строки
// ...
}
//==============================================================================
void Logger::stop()
{
// Отмена регистрации нашей функции:
qInstallMessageHandler(0);
// Тут надо записать последние строки в лог файл и закрыть его
// ...
}
//==============================================================================
void Logger::writeLog(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
Q_UNUSED(context)
QString logText = QString("[%1] %2: %3")
.arg(
QDateTime::currentDateTime().toString("HH:mm:ss.zzz"),
logTypeToString(type),
msg
);
// Тут надо записать строку в лог файл:
// [13:10:05.960] Debug: Пример строки
Q_UNUSED(logText)
// ...
}
//==============================================================================
Logger::Logger(QObject *parent) : QObject{parent}
{
// Конструктор приватный - недоступен извне
}
//==============================================================================
Logger::~Logger()
{
// Обязательно остановить:
stop();
}
//==============================================================================