您的位置:首页 > 编程语言 > Qt开发

QT4保存调试日志

2016-07-19 11:38 615 查看
windows下Qt程序发布后,所有调试日志都没有了,有时候出错不容易找出,所以做了个根据命令行传入debug后,把调试日志写到文件中的功能:

#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QFile>
#include <QTextStream>
#include <QDebug>
#include <QDateTime>

static QString logfilepath = "debuglog.txt";

void customMessageHandler(QtMsgType type, const char *msg)
{
QString txt;
switch (type) {
//调试信息提示
case QtDebugMsg:
txt = QString("Debug: %1").arg(msg);
break;

//一般的warning提示
case QtWarningMsg:
txt = QString("Warning: %1").arg(msg);
break;
//严重错误提示
case QtCriticalMsg:
txt = QString("Critical: %1").arg(msg);
break;
//致命错误提示
case QtFatalMsg:
txt = QString("Fatal: %1").arg(msg);
abort();
}
QDateTime now = QDateTime::currentDateTime();
QString filepath = "debuglog_" + now.toString("yyyyMMddhhmmss") + ".txt";
QFile outFile(logfilepath);
outFile.open(QIODevice::WriteOnly | QIODevice::Append);
QTextStream ts(&outFile);
ts << txt << endl;
}

int main(int argc, char *argv[])
{

QApplication a(argc, argv);

// 获取命令行参数
QStringList ql = QCoreApplication::arguments ();
// 遍历命令行参数,如果传入debug 则把qDebug等输出重定向到文件中
foreach(QString tmp, ql)
{
qDebug() << "parm: " << tmp << endl;
if (tmp == "debug")
{
QDateTime now = QDateTime::currentDateTime();
logfilepath = "debuglog_" + now.toString("yyyyMMddhhmmss") + ".txt";
//先注册自己的MsgHandleIr
qInstallMsgHandler(customMessageHandler);
}
}
//以后就可以像下面这样直接打日志到文件中,而且日志也会包含时间信息
qDebug("This is a debug message at thisisqt.com");
qWarning("This is a warning message at thisisqt.com");
qCritical("This is a critical message at thisisqt.com");
//qFatal("This is a fatal message at thisisqt.com");

MainWindow w;
w.show();

return a.exec();
}
参考: http://www.cppblog.com/lauer3912/archive/2011/04/10/143870.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt qt4 调试 发布 windows