【Qt】qDebug()调试信息保存至txt日志文件

来源:互联网 发布:项羽彭城之战 知乎 编辑:程序博客网 时间:2024/04/24 11:47

开发环境: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 Code     QByteArray 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);#endif    QApplication a(argc, argv);    Widget w;    w.show();    return a.exec();}


0 0
原创粉丝点击