本文主要是介绍【Qt】qDebug()调试信息保存至txt日志文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
开发环境:Win10 Qt5.7.0 VisualStudio2015
核心:qInstallMessageHandler函数
官方文档:http://doc.qt.io/qt-5/qtglobal.html#qInstallMessageHandler
Qt可将qDebug()输出的信息(其他信息),进行额外处理
最常见的用法,是将输出信息保存到txt文本文件中,可做发布后日志功能
范例(在Release模式下,qDebug()输出的调试信息保存至软件根目录下*.lgt文件中)
#include <QApplication>
#include <iostream>
#include <cstdlib>
#include <QFile>
#include <QString>
#include <QTextStream>
#include <QMutex>
#include <QDateTime>
using namespace std;QMutex mutex;//日志代码互斥锁
QString timePoint;//日志生成
void LogMsgOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg){ mutex.lock();cout << msg.toStdString() << endl;//Critical Resource of CodeQByteArray localMsg = msg.toLocal8Bit();QString log;switch (type) {case QtDebugMsg://fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);log.append(QString("Debug File:%1 %2 Line:%3 Content:%4").arg(context.file).arg(context.function).arg(context.line).arg(msg));break;case QtInfoMsg://fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);log.append(QString("Info: %1 %2 %3 %4").arg(localMsg.constData()).arg(context.file).arg(context.line).arg(context.function));break;case QtWarningMsg://fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);log.append(QString("Warning: %1 %2 %3 %4").arg(localMsg.constData()).arg(context.file).arg(context.line).arg(context.function));break;case QtCriticalMsg://fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);log.append(QString("Critical: %1 %2 %3 %4").arg(localMsg.constData()).arg(context.file).arg(context.line).arg(context.function));break;case QtFatalMsg://fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);log.append(QString("Fatal: %1 %2 %3 %4").arg(localMsg.constData()).arg(context.file).arg(context.line).arg(context.function));abort();}QFile file;QString path = QString("log%1.lgt").arg(timePoint);file.setFileName(path);if (!file.open(QIODevice::ReadWrite | QIODevice::Append)){QString erinfo = file.errorString();cout << erinfo.toStdString() << endl;return;}QTextStream out(&file);out << "\n\r" << log;file.close();mutex.unlock();}int main(int argc, char *argv[])
{//release模式下,调试信息输出至日志文件
#ifndef _DEBUGtimePoint = QDateTime::currentDateTime().toString("yyyyMMddHHmmss");qInstallMessageHandler(LogMsgOutput);
#endifQApplication a(argc, argv);Widget w;w.show();return a.exec();
}
这篇关于【Qt】qDebug()调试信息保存至txt日志文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!