В тех случаях, если отладка в среде разработки недоступна, например при создании служб Windows, приходится писать отладочную информацию в файл. Чтобы сделать это в Qt и при этом не изобретать велосипед, можно воспользоватся встроенными методами qDebug, qWarning, qCritical, qFatal.
По умолчанию эти методы выводят сообщения в консоль. Чтобы перенаправить вывод в файл, необходимо воспользоватся методом qInstallMsgHandler(). Делается это так:
#include <QFile>
#include <QDateTime>
#include <QDebug>
#include <QTextStream>
//...
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
qInstallMsgHandler(myMessageOutput);
qDebug("Hello World!\n");
MainWindow w;
w.show();
return app.exec();
}
Метод myMessageOutput() определяется следующим образом:
void myMessageOutput(QtMsgType type, const char *msg){
QFile fMessFile(qApp->applicationDirPath() + "/log.txt");
if(!fMessFile.open(QIODevice::Append | QIODevice::Text)){
return;
}
QString sCurrDateTime = "[" +
QDateTime::currentDateTime().toString("dd.MM.yyyy hh:mm:ss.zzz") + "]";
QTextStream tsTextStream(&fMessFile);
switch(type){
case QtDebugMsg:
tsTextStream << QString("%1 Debug - %2").arg(sCurrDateTime).arg(msg);
break;
case QtWarningMsg:
tsTextStream << QString("%1 Warning - %2").arg(sCurrDateTime).arg(msg);
break;
case QtCriticalMsg:
tsTextStream << QString("%1 Critical - %2").arg(sCurrDateTime).arg(msg);
break;
case QtFatalMsg:
tsTextStream << QString("%1 Fatal - %2").arg(sCurrDateTime).arg(msg);
abort();
}
tsTextStream.flush();
fMessFile.flush();
fMessFile.close();
}
Удачи!
Комментариев нет:
Отправить комментарий