首页 > 技术知识 > 正文

Qt打印Log文件

在Qt开发过程当中经常使用qDebug等一些输出来调试程序,但是到了正式发布的时候,都会被注释或者删除,采用日志输出来代替。实际上qDebug的一些调试可以不用全部注释,留一些关键的调试信息用于程序运行时打印到日志文件中,想要使用qDebug打印日志到日志文件中只需要使用“qInstallMessageHandler”注册打印函数就可以了。

Qt提供了5个全局函数用于输出调试或警告信息: qDebug:调试信息 qWarning:警告信息 qCritical:严重错误 qFatal:致命错误 qInfo : 正常信息

打印函数: void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg) { static QMutex mutex; mutex.lock(); QString text; QFile file; switch(type) { case QtDebugMsg: text = QString(“Debug:”); file.setFileName(“Debug.log”); break; case QtWarningMsg: text = QString(“Warning:”); file.setFileName(“Warning.log”); break; case QtCriticalMsg: text = QString(“Critical:”); file.setFileName(“Critical.log”); break; case QtFatalMsg: text = QString(“Fatal:”); file.setFileName(“Fatal.log”); } QString context_info = QString(“File:(%1) Line:(%2)”).arg(QString(context.file)).arg(context.line); QString current_date_time = QDateTime::currentDateTime().toString(“yyyy-MM-dd hh:mm:ss ddd”); QString current_date = QString(“(%1)”).arg(current_date_time); QString message = QString(“%1 %2 %3 %4”).arg(text).arg(context_info).arg(msg).arg(current_date); file.open(QIODevice::WriteOnly | QIODevice::Append); QTextStream text_stream(&file); text_stream << message << “\r\n”; file.flush(); file.close(); mutex.unlock(); }
<
注册:

在主函数中添加: qInstallMessageHandler(outputMessage);

在需要的地方写上需要的打印语句: qDebug() << QString::fromLocal8Bit(“调试信息”); qWarning() << QString::fromLocal8Bit(“警告信息”); qCritical() << QString::fromLocal8Bit(“严重错误”); 调用打印语句后就会在程序目录下生成日志文件,日志文件里就是我们输出的日志信息: Qt打印Log文件 日志文件使用文本文件就可以打开。

猜你喜欢