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 
 3 
 4 #include 
 5 #include 
 6 #include 
 7 #include 
 8 #include 
 9 #include 
10 #include 
11 #include 
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 }

运行结果:

Qt5 调试之详细日志文件输出(qInstallMessageHandler)_第1张图片

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

你可能感兴趣的:(QT开发,qt,qt开发,qt教程,qt6,C/C++)