Qt5 调试之详细日志文件输出(qInstallMessageHandler)
注明:以下方法仅适用于 Qt5 及以上版本
函数说明:
QtMessageHandler qInstallMessageHandler(QtMessageHandler handler)
此函数在使用Qt消息处理程序之前已定义。返回一个指向前一个消息处理程序。
消息处理程序是一个函数,用于打印qDebug,qWarning,qCritical和qFatal的错误消息。Qt库(调试模块)包含成百上千的警告信息,打印时(通常是无效的函数参数)发生内部错误。Qt构建在release模式下还包含一些除了QT_NO_WARNING_OUTPUT和/或QT_NO_DEBUG_OUTPUT之外的警告已经设置在编译。如果你实现自己的消息处理程序,需要完全控制这些消息。
在X11或Windows下的调试器,缺省的消息处理程序向标准输出打印消息。如果这是一个致命的消息,应用程序立即中止。
只有一个消息处理程序可以被定义,因为这通常是在应用程序的基础上完成控制调试输出。
恢复消息处理程序,调用qInstallMessageHandler(0)。
调试级别:
qDebug: 调试信息
qWarning:警告信息
qCritical: 严重错误
qFatal: 致命错误
目的:生成log.txt日志文件,记录详细日志信息(包括等级、所在文件、所在行号、描述信息、产生时间等),以便于快速跟踪、定位。
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
代码:
1 #include "widget.h"
2 #include <QApplication>
3
4 #include <QtDebug>
5 #include <QFile>
6 #include <QTextStream>
7 #include <QDebug>
8 #include <QDateTime>
9 #include <QMutex>
10 #include <QString>
11 #include <qapplication.h>
12
13 void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
14 {
15 // 加锁
16 static QMutex mutex;
17 mutex.lock();
18
19 QString text;
20
21 switch(type)
22 {
23 case QtDebugMsg:
24 text = QString("Debug:");
25 break;
26
27 case QtWarningMsg:
28 text = QString("Warning:");
29 break;
30
31 case QtCriticalMsg:
32 text = QString("Critical:");
33 break;
34
35 case QtFatalMsg:
36 text = QString("Fatal:");
37 }
38
39 // 设置输出信息格式
40 QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line);
41 QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");
42 QString current_date = QString("(%1)").arg(current_date_time);
43 QString message = QString("%1 %2 %3 %4").arg(text).arg(context_info).arg(msg).arg(current_date);
44
45 // 输出信息至文件中(读写、追加形式)
46 QFile file("log.txt");
47 file.open(QIODevice::WriteOnly | QIODevice::Append);
48 QTextStream text_stream(&file);
49 text_stream << message << "\r\n";
50 file.flush();
51 file.close();
52
53 // 解锁
54 mutex.unlock();
55 }
56
57 int main(int argc, char *argv[])
58 {
59 QApplication app(argc, argv);
60
61 //注册MessageHandler
62 qInstallMessageHandler(outputMessage);
63
64 Widget w;
65 w.debtest();
66 w.show();
67 //打印日志到文件中
68 qDebug("This is a debug message");
69 qWarning("This is a warning message");
70 qCritical("This is a critical message");
71 qFatal("This is a fatal message");
72
73 return app.exec();
74 }
运行结果:
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
相关文章
- 【Android 性能优化】布局渲染优化 ( 过渡绘制 | 自定义控件过渡绘制 | 布局文件层次深 | GPU 过渡绘制调试工具 | 背景过度绘制 )
- sruts2:单个文件上传,多个文件上传(属性驱动)详解编程语言
- Linux打开DB文件:一步步完成数据库操作(linux打开db文件)
- Linux文件根据大小排序的方法(linux按大小排序)
- Linux文件的换行符号解析(linux文件换行符)
- 轻松学会Linux系统下打开ZIP文件的方法(linux打开zip)
- 文件Linux环境下执行Exe文件的方法(linux下执行exe)
- Linux下进程文件的管理与调试(linux进程文件)
- Linux文件基本属性
- Linux历史文件:回顾系统变革的重要文献(linuxhistory文件)
- Linux调试神器0字节文件(linux0字节文件)
- 如何调试异步加载页面里包含的js文件