qt 日志输出 QMessageLogger QDebug QLoggingCategory qDebug qt_message_output() qInstallMessageHandler()

qt的日志输出有 QMessageLogger、QDebug、QLoggingCategory三个类进行操作,qDebug 和qCDebug是为便捷使用那三个类对象而进行的宏包装。
另外qt还为外界提供 qt_message_output()  进行日志输出,以及qInstallMessageHandler进行输出控制操作。

一、QMessageLogger、QDebug、qDebug()、qt_message_output() 

qt日志输出简单案例:

#include "qloggingcategory.h"
#include <QDebug>

int main()
{
    char buffer[]="this is the message";
    //方式1。通过qDebug()宏输出
    qDebug()<<buffer<<endl;    //按C++的cout的样式输出信息。
    qDebug("%s",buffer);  //按C语言的printf()的样式输出信息。


    //方式2。通过QMessageLogger输出
    QMessageLogger logger(__FILE__,__LINE__,__FUNCTION__,"gg");
    logger.debug(buffer);//QtDebugMsg类型
    logger.info(buffer);//QtInfoMsg类型

    //方式3,通过QDebug输出
    {QDebug dbg=logger.debug();dbg<<buffer;}


    //方式4。通过qt_message_output进行输出
    qt_message_output(QtMsgType::QtDebugMsg,QMessageLogContext(__FILE__,__LINE__,
__FUNCTION__,"gg"),buffer);

    return 0;
}

qt默认输出是如何输出到 应用程序输出面板 (application output panel)

qt中,拥有专用的打印调试信息的QDebug类和QMessageLogger类,QMessageLogger是主要进行打印和对打印信息进行格式化编排的类。QDebug则为QMessageLogger提供类似cout样式的标准化输出操作。QDebug还可以用于向文件、字符串中进行流式输入的操作

qt为QMessageLogger类对象做了宏定义qDebug()包装,使得使用起来与C++中cout标准输入输出的用法一致,极为方便。
 qDebug() 、QDebug对象、QMessageLogger对象,默认会输出到qt creator 的 应用程序输出面板 (application output panel)
通过调试可知,qt中所有最终处理调试信息输出的方法都在qt源码的qlogging.cpp 文件中的qt_message_print()函数。比如QDebug对象在析构的时候就会调用其中的qt_message_output()函数 。

//D:\Qt\Qt5.12.0\5.12.0\Src\qtbase\src\corelib\io\qdebug.cpp
QDebug::~QDebug()
{
    if (!--stream->ref) {
        if (stream->space && stream->buffer.endsWith(QLatin1Char(' ')))
            stream->buffer.chop(1);
        if (stream->message_output) {
            qt_message_output(stream->type,
                              stream->context,
                              stream->buffer);
        }
        delete stream;
    }
}
--------------------------------------
//D:\Qt\Qt5.12.0\5.12.0\Src\qtbase\src\corelib\global\qlogging.h
​​​​​​​void qt_message_output(QtMsgType msgType, const QMessageLogContext &context, const QString &message)

qt在windows下qt_message_print()中最后会调用到windows的Api 函数:OutputDebugString().,这个函数会将字符串输出到 qt ide的  应用程序输出面板(application output panel​​​​​​​ )  上。

 如果开启了控制台窗口,可以通过设置qt环境变量QT_FORCE_STDERR_LOGGING值为1,可以强制内容输出到stderr上,也就是输出到控制台窗口上。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值