Qt5 调试之详细日志文件输出(qInstallMessageHandler)

2018/09/03 19:43
阅读数 612

注明:以下方法仅适用于 Qt5 及以上版本 

函数说明

QtMessageHandler qInstallMessageHandler(QtMessageHandler handler)

  此函数在使用Qt消息处理程序之前已定义。返回一个指向前一个消息处理程序。
  消息处理程序是一个函数,用于打印
qDebug,qWarning,qCriticalqFatal的错误消息。Qt库(调试模块)包含成百上千的警告信息,打印时(通常是无效的函数参数)发生内部错误。Qt构建在release模式下还包含一些除了QT_NO_WARNING_OUTPUT和/或QT_NO_DEBUG_OUTPUT之外的警告已经设置在编译。如果你实现自己的消息处理程序,需要完全控制这些消息。
  在X11或Windows下的调试器,缺省的消息处理程序向标准输出打印消息。如果这是一个致命的消息,应用程序立即中止。
  只有一个消息处理程序可以被定义,因为这通常是在应用程序的基础上完成控制调试输出。
  恢复消息处理程序,调用
qInstallMessageHandler(0)

调试级别

  qDebug:   调试信息

   qWarning:警告信息

   qCritical:  严重错误

   qFatal:     致命错误

 

目的生成log.txt日志文件,记录详细日志信息(包括等级、所在文件、所在行号、描述信息、产生时间等),以便于快速跟踪、定位。

 

代码

 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 }

 

运行结果

 

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部