zoukankan      html  css  js  c++  java
  • 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日志文件,记录详细日志信息(包括等级、所在文件、所在行号、描述信息、产生时间等),以便于快速跟踪、定位。

    代码

     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 << "
    ";
    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 }

    运行结果:

  • 相关阅读:
    神经网络和深度学习之——前馈神经网络
    神经网络和深度学习之感知器工作原理
    神经网络和深度学习之神经元和感知器
    基于keras的BiLstm与CRF实现命名实体标注
    基于双向BiLstm神经网络的中文分词详解及源码
    Net Core中数据库事务隔离详解——以Dapper和Mysql为例
    利用卷积神经网络(VGG19)实现火灾分类(附tensorflow代码及训练集)
    AlexNet 网络详解及Tensorflow实现源码
    ASP.NET Core MVC I/O编程模型
    Tensorflow开发环境配置及其基本概念
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14692418.html
Copyright © 2011-2022 走看看