QDebug等重定向到文件中

转载 2018年04月17日 19:24:45
        Qt的qDebug() 等函数,可以打印出十分细致的log,用过你就会喜欢。现在要将qDebug() 等重定向到文件中。
        
使用Qt的MessageHandler可以将消息重定向。在Qt4.x时代,安装一个消息处理器是用

qInstallMsgHandler

来安装的。这个函数接受的一个函数指针作为参数,函数的定义是

 void funName(QtMsgType , const char *)

如笔者的一个小函数:

void messageOutput(QtMsgType, const char *msg)
{
    static QMutex mutex;
    mutex.lock();
    logFile->write(msg);
    logFile->write("\n");
    logFile->flush();
    mutex.unlock();
}

// Install it
qInstallMsgHandler(messageOutput);

logFile是一个全局的QFile类指针。


今天笔者使用Qt5.1版本来编写程序。该函数编译不通过。因为Qt 5.x后,这个函数被

qInstallMessageHandler

替代了。这个函数同样接受一个函数指针作为参数,函数的定义是

void funName(QtMsgType , QMessageLogContext , const QString &)

可见,该函数中多了一个QMessageLogContext参数。这个参数包含了debug的一些基本信息,例如该debug所在的函数,所在的文件,所在的行数等。可以让debug更加详细。

笔者的一段小代码

void MessageOutput(QtMsgType type , const QMessageLogContext &context , const QString &msg)
{
    static QMutex mutex;
    mutex.lock();

    QString log;
    switch(type)
    {
    case QtDebugMsg:
        log = QString("Debug: ");
        break;


    case QtWarningMsg:
        log = QString("Error: ");
        break;


    case QtCriticalMsg:
        log = QString("Critical Error: ");
        break;


    case QtFatalMsg:
        log = QString("Fatal Error: ");
        abort();
        break;


    default:
        log = QString("Unknow Msg Type : ");
        break;
    };


    log += QTime::currentTime().toString("hh:mm:ss.zzz, File: ") + QString(context.file) ;
    log += QString(", Line: " ) + QString::number(context.line) + QString(" : %1\n").arg(msg);
    logFile->write(log.toStdString().c_str());
    logFile->flush();


    mutex.unlock();
}

可以见到在最后面做了一些格式化的东西。这样,debug看起来就是这样的

Qt QDebug等重定向到文件中 - soooYo - ☆χιΑο.处

至于重定向到哪里,就看你的QFile打开的是哪个文件了。


这样处理格式其实还不是那么优雅。像第一个函数那样,没有做任何格式化的操作,因为笔者在另外一个文件中做了格式化。

Qt QDebug等重定向到文件中 - soooYo - ☆χιΑο.处

 这个文件被命名为log.h。这样,需要用到QDebug的地方,都可以#include”log.h”。

相信大家都明白了。


Enjoy your Qt.







转载自:http://blog.163.com/soyo_gogogo/blog/static/171414077201392705639321/

qt 调试语句的处理 禁用和重定向到文件

在qt调试中,qdebug是个非常方便的功能,只需要在包含#include ,你便可以在代码中随时随地使用打印调试语句了,并且可以选择对应的调试等级。 这些函数按照调试的等级以此有,其中qFat...
  • godvmxi
  • godvmxi
  • 2014-12-06 13:03:03
  • 2570

Qt 定制qDebug() 信息到log文件

Qt中有qInstallMsgHandler 方法可以去定制消息发生后的回调函数,它回调同时还有qDebug的级别信息。这样我们可以方便把错误消息定制到自己的log文件里面 如下: C...
  • huanggang982
  • huanggang982
  • 2014-07-12 09:28:48
  • 980

Qt:重定向QDebug输出到文件,并附上日期

介绍代码比较简单,就是一个函数,在main中调用即可
  • wsj18808050
  • wsj18808050
  • 2016-12-31 11:55:50
  • 1198

重定向qDebug、qWarning等到某个Qt窗口部件

将qDebug、qWarning等输出显示到一个窗口部件中
  • dbzhang800
  • dbzhang800
  • 2011-07-09 22:55:09
  • 6737

QT中调试信息输出到日志文件

一、基本分类: qDebug : 调试信息提示 qWarning: 一般的警告提示 qCritical: 严重错误提示 qFatal: 致命错误提示 二、如何截获这些信息 Qt提供...
  • yeluoyunfei
  • yeluoyunfei
  • 2014-08-26 19:29:27
  • 1486

Qt5.7.0 日志输出文件之debug重定向

在Qt开发过程当中经常使用qDebug等一些输出来调试程序,但是到了正式发布的时候,都会被注释或者删除,采用日志输出来代替。 做过项目的童鞋可能都使用过日志功能,以便有异常错误能够快速跟踪、定位,Q...
  • u013711616
  • u013711616
  • 2016-08-21 02:07:44
  • 2407

QT5日志功能(qDebug、qWarnng、qCritical、qFatal)

一、基本分类: qDebug : 调试信息提示 qWarning: 一般的警告提示 qCritical: 严重错误提示 qFatal: 致命错误提示 二、如何截获这些信息 Qt提供了q...
  • u010261063
  • u010261063
  • 2016-10-20 20:10:14
  • 1236

QT5 qDebug 输出到文件

QT4的做法和QT5有差异, QT5中已经废除了qInstallMsgHandler . 具体代码如下:#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) vo...
  • Fred_Wu
  • Fred_Wu
  • 2016-06-01 11:26:02
  • 2040

VS_QT中配置qDebug输出

在使用qt_create时可以使用qDebug进行调试输出。在VS中也可以使用。但需要配置。配置过程如下图所示: 一、首先右击工程名,选择最后一个选项“Properties” 二、然后选择...
  • cjnewstar111
  • cjnewstar111
  • 2012-04-19 12:36:26
  • 2203

【Qt】qDebug()调试信息保存至txt日志文件

开发环境:Win10 Qt5.7.0 VisualStudio2015 核心:qInstallMessageHandler函数 Qt可将qDebug()输出的信息(其他信息),进行额外处理 最常见的用...
  • shihoongbo
  • shihoongbo
  • 2016-10-09 11:01:34
  • 1774
收藏助手
不良信息举报
您举报文章:QDebug等重定向到文件中
举报原因:
原因补充:

(最多只允许输入30个字)