#include "logger.h" #include #include #include //============================================================================== // // Функция для перехвата вызовов логирования 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(); } //==============================================================================