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
#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
相关文章推荐
- Linux 自检和 SystemTap
- 如何重装TCP/IP协议
- Windows 8 官方高清壁纸欣赏与下载
- 谁是桌面王者?Win PK Linux三大镇山之宝
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows Clang开发环境备忘
- 从Windows系统下访问Linux分区相关软件
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows下搭建本地SVN服务器
- 使用Windows原生命令一键清空剪贴板
- Python 七步捉虫法
- windows用windeployqt发布qt quick application程序
- 利用开源软件打造自己的全功能远程工具
- Windows 8虚拟机不能全屏的解决方法
- 虚拟化基础架构Windows 2008篇之1-虚拟化基础服务概述