在Qt帮助文档中搜索qInstallMessageHandler,有关于Qt日志生成相关介绍,本文主要功能将Qt程序中的日志生成到指定文件目录下,以txt形式存储。
#include <qapplication.h>
#include <stdio.h>
#include <QFile>
#include <stdlib.h>
#define LOG_FILE qApp->applicationDirPath() + "/log.txt"
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QByteArray localMsg = msg.toLocal8Bit();
const char *file = context.file ? context.file : "";
const char *function = context.function ? context.function : "";
QString text;
QString currentTime = QDataTime::currentDataTime().toString("yyyy-MM-dd hh:mm:ss");
switch (type) {
case QtDebugMsg:
text = QString("%1 Debug: %2,%3%4%5,%6").arg(currentTime).arg(localMsg.constData()).arg(file).arg(context.line).arg(function).arg(msg);
break;
case QtInfoMsg:
text = QString("%1 Information: %2,%3%4%5,%6").arg(currentTime).arg(localMsg.constData()).arg(file).arg(context.line).arg(function).arg(msg);
break;
case QtWarningMsg:
text = QString("%1 Warning: %2,%3%4%5,%6").arg(currentTime).arg(localMsg.constData()).arg(file).arg(context.line).arg(function).arg(msg);
break;
case QtCriticalMsg:
text = QString("%1 Critical: %2,%3%4%5,%6").arg(currentTime).arg(localMsg.constData()).arg(file).arg(context.line).arg(function).arg(msg);
break;
case QtFatalMsg:
text = QString("%1 Fatal: %2,%3%4%5,%6").arg(currentTime).arg(localMsg.constData()).arg(file).arg(context.line).arg(function).arg(msg);
break;
}
QFile file(LOG_FILE);
file.open(QIODevice::WriteOnly | QIODevice::Append);
QTextStream textStream(&file);
textStream << text << "\r\n";
file.flush();
file.close();
}
int main(int argc, char **argv)
{
qInstallMessageHandler(myMessageOutput);
QApplication app(argc, argv);
...
return app.exec();
}
如此,便可将项目中所有消息存到log.txt文件中了。