Qtはログファイルを生成します

要約:

この記事はQtプログラムにログ機能を実装しているため、読者はこれに基づいてさらに作成および拡張できます。

はじめに:

システムログは通常、システムの重要な動作情報を格納するlog.txtファイルを指します。2つの主な機能があります。1。システムの重要な動作情報の記録2.システムが突然クラッシュした場合、ログに基づいてプログラムエラーを追跡および特定できます。
QtはqInstallMessageHandler(Qt5)またはqInstallMsgHandler(Qt4)を提供し、QDebug、QWarning、QErrorなどをリダイレクトできます。

qDebug デバッグ情報
q警告 警告メッセージ
qクリティカル 致命的なエラー
q致命的 致命的なエラー

実装プロセス

#include <QApplication>
#include <QtDebug>
#include <QFile>
#include <QTextStream>
#include <QDebug>
#include <QDateTime>
#include <QMutex>
#include <QString>
#include <qapplication.h>
#include <QMessageBox>

void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
 {
     // 加锁
     static QMutex mutex;
     mutex.lock();
     QString text;
     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;
     }

     // 设置输出信息格式
     QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line);
     QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ");
     QString current_date = QString("(%1)").arg(current_date_time);
    // QString message = QString("%1 %2 %3 %4").arg(text).arg(context_info).arg(msg).arg(current_date);
     QString message = QString("%1 %2").arg(current_date).arg(msg);
     // 输出信息至文件中(读写、追加形式)
     QFile file("log.txt");
     file.open(QIODevice::WriteOnly | QIODevice::Append);
     QTextStream text_stream(&file);
     text_stream << message << "\r\n";
     file.flush();
     file.close();
     // 解锁
     mutex.unlock();
 }

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //注册日志函数
    qInstallMessageHandler(outputMessage); 
    //记录日志信息
    qDebug("This is a debug message");
    qWarning("This is a warming message");
    qCritical("This is a critical message");
    //qFatal("This is a fatal message");
    return a.exec();
}

演算結果:

log.txtファイルは、build-** _Qt_5_11_2_MSVC201 _ ** bit-****ファイルの下にあります。
ここに画像の説明を挿入

展開:

上記の概要では、main関数の前にoutputMessageを定義しました。このメソッドは複雑なプログラムでは見苦しいものです。より良い方法は、ログライブラリにパッケージ化することです。この場合は、#include " log.h「そうします。さらに、多くのブログ投稿は、ログカテゴリにそれをカプセル化します。これも学ぶ価値があります。
https://blog.csdn.net/bootleader/article/details/70213281?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

元の記事を22件公開 Likes2 訪問数1157

おすすめ

転載: blog.csdn.net/qinqinxiansheng/article/details/105037044