qt 调试打印 格式化输出、重定向、消息实时分类过滤等技巧

本文介绍了Qt调试时如何实现格式化输出、重定向日志到文件以及通过QLoggingCategory进行消息分类和实时过滤。包括使用qInstallMessageHandler自定义消息处理器,通过Q_DECLARE_LOGGING_CATEGORY声明和使用分类,以及利用qSetMessagePattern定制输出格式。
摘要由CSDN通过智能技术生成

qt 调试打印 格式化输出、重定向等技巧

1 自定义消息处理器 qInstallMessageHandler

qInstallMessageHandler(myMsgOutput);

  • 安装消息处理器
  • 重定向到文件
  • 指定文件最大大小
  • 格式化输出
#include <qapplication.h>
#include <QDateTime>
#include <QFile>
#include <QTextStream>
#include <QtMsgHandler>
#include <QMessageLogContext>
#include <QMutex>


LoggerManager::LoggerManager(QObject *parent) : QObject(parent)
{
   
    qInstallMessageHandler(myMsgOutput);
}

void LoggerManager:: myMsgOutput(QtMsgType type, const QMessageLogContext &context, const QString& msg)
{
   

    fprintf(stdout, "%s\n", msg.toLocal8Bit().constData());
    fflush(stdout);


    static QMutex mutex;
    mutex.lock();


    QString time=QDateTime::currentDateTime().toString(QString("[yyyy-MM-dd HH:mm:ss:zzz]"));
    QString mmsg;
    QFileInfo codefile(context.file);
    QString codeFileName = codefile.fileName();

    QString msgFormat = QString("%1\tfile:%2:%3 func:%4\n<<<<---\t%5--->>>\n").arg(time).arg(codeFileName).arg(context.line).arg(context.function).arg(msg);
    switch(type)
    {
   
    case QtDebugMsg:
        mmsg=QString("Debug %1").arg(msgFormat);
        break;
    case QtInfoMsg:
        mmsg=QString("Info %1").arg(msgFormat);
        break;
    case QtWarningMsg:
        mmsg=QString("Warning %1").arg(msgFormat);
        break;
    case QtCriticalMsg:
        mmsg=QString("Critical %1").arg(msgFormat);
        break;
    case 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值