Qt应用程序输出日志的方法

本文介绍Qt应用程序输出日志的方法。

Qt应用程序发布后,应用程序有时会出现一些问题,程序运行过程中的信息记录显得尤为重要,这就要求应用程序可以输出日志,通过日志方便我们分析,解决问题。

Qt对日志的输出提供了较好的支持,下面介绍如何在Qt应用程序中输出日志。

1.输出重定向

Qt的qDebug(),qCritical(),qWarning()默认输出是输出到控制台的,也就是我们的调试输出。要想输出到日志文件,就需要对输出重定向,Qt提供了一个回调函数,方便用户按自己的输出格式输出日志。

1)建立"log.h"

#ifndef LOG_H
#define LOG_H

#include <QCoreApplication>
#include <QString>


#define LOG_FILE    ("log.txt")


void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg);


#endif // LOG_H

2)建立"log.cpp"

#include "log.h"
#include <QMutex>
#include <QString>
#include <QFile>
#include <QDateTime>
#include <QTextStream>


void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    QString text;
    QString time;
    QFile file(LOG_FILE);
    static QMutex mutex;

    Q_UNUSED(context)

    mutex.lock();

    file.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream textStream(&file);

    switch(type) {
        case (QtDebugMsg): {text = QString("Debug:"); break;}
        case (QtWarningMsg): {text = QString("Warning:"); break;}
        case (QtCriticalMsg): {text = QString("Critical:"); break;}
        case (QtFatalMsg): {text = QString("Fatal:"); break;}
        default: {break;}
    }

    time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
    text = QString("%1%2 %3").arg(text).arg(time).arg(msg);

    textStream << text << "\r\n";

    file.flush();
    file.close();

    mutex.unlock();
}

这里我们定义了1个外部函数,函数内容比较简单,就不细介绍了。

2.安装

定义好用户的消息处理函数后,需要注册到系统中,在"main.cpp"中:

#define APP_DEBUG

int main(int argc, char *argv[])
{
#ifdef APP_DEBUG
    qInstallMessageHandler(nullptr);
#else
    qInstallMessageHandler(messageHandler);
#endif

    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    qDebug() << "debug";
    qCritical() << "critical";
    qWarning() << "warning";

    return a.exec();
}

采用qInstallMessageHandler()函数将我们定义的消息处理函数安装进系统,输出就可以到日志文件了。

另外,这里定义了宏"APP_DEBUG",在代码开发过程中定义,可使输出信息到控制台,程序发布时可取消定义,日志输出到日志文件中。

总结,本文介绍了Qt应用程序输出日志的方法。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值